SQLITE:选择共享相同外键的所有项目
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQLITE:选择共享相同外键的所有项目相关的知识,希望对你有一定的参考价值。
我是SQL
和Sqlite
的新手,我可能不会这样做,但是出于学术原因,我正在尝试用自己创建的脏数据库来学习基础知识。请原谅我,如果词汇不正确,我还在学习过程中。
我创建了一组表,每个表都有不同类型的实体,但它们都具有相似性:它们共享具有不同值的相同Foreign Key
的多个事件。
表M1:包含2个项目的实体:
+------------+---------+--------+-------+
Primary Key Unique ID Data1 Data2
+------------+---------+--------+-------+
1 x1 103021 103022
表M2:包含3个项目的实体:
+------------+---------+--------+-------+-------+
Primary Key Unique ID Data1 Data2 Data3
+------------+---------+--------+-------+-------+
1 y1 103021 103022 103001
之前的所有数据列都是Foreign Keys
到Unique Key
(表N):
+------------+---------+--------+-------+
Primary Key Unique ID Data1 Data2
+------------+---------+--------+-------+
1 100002 ... ...
2 103001 ... ...
3 103021 ... ...
4 103022 ... ...
我需要做的就是提取共享给定唯一项目的所有实体(My Foreign Key
)。例如,给定103022
将给出两个实体:x1
和y1
。
现在我已经尝试了几天,我已经设法通过JOIN
语句获得了我需要的一些信息。
内部联接:
SELECT N.id, T1.id FROM N INNER JOIN M1 as T1 on T1.data1=N.id OR T1.data2=N.id
交叉加入:
SELECT N.id, T1.id FROM N CROSS JOIN M1 as T1 WHERE T1.data1=N.id OR T1.data2=N.id
INNER JOIN
只有在我一次使用一个表并使用python实时后处理时才能工作,我明白CROSS JOIN
会生成我的数据的笛卡尔积,并且在我添加其他表时可以轻松使用太多内存布尔条件。所以我认为这不是一个选择。
还有其他方法我没想过吗?
谢谢你们!
答案
我想你正在寻找桌子的Union
SELECT N.id, T1.id FROM N INNER JOIN M1 as T1 on T1.data1=N.id OR T1.data2=N.id
Union
SELECT N.id, T1.id FROM N INNER JOIN M2 as T1 on T1.data1=N.id OR T1.data2=N.id
注意:考虑N作为主表和M1,M2是您要加入的其他表。
以上是关于SQLITE:选择共享相同外键的所有项目的主要内容,如果未能解决你的问题,请参考以下文章
在片段中显示适当的 SQLite 数据(相同的条目出现在不同的选择条目中)