SQLITE:选择共享相同外键的所有项目

时间:2017-12-19 09:09:19

标签: sql sqlite join foreign-keys

我是SQLSqlite的新手,我可能不会这样做,但出于学术原因,我正在努力学习我自己创建的脏数据库的基础知识。请原谅我,如果词汇不正确,我还在学习过程中。

我创建了一组表,每个表都有不同类型的实体,但它们都具有相似性:它们共享具有不同值的同一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 KeysUnique Key(表N):

+------------+---------+--------+-------+
 Primary Key  Unique ID   Data1   Data2
+------------+---------+--------+-------+
      1         100002     ...     ...
      2         103001     ...     ...
      3         103021     ...     ...
      4         103022     ...     ...

我需要做的就是提取共享给定唯一项目(My Foreign Key)的所有实体。例如,给定103022两个实体:x1y1

现在我已经尝试了几天,我已经设法通过JOIN声明获得了我需要的一些信息。

INNER JOIN:

SELECT N.id, T1.id FROM N INNER JOIN M1 as T1 on T1.data1=N.id OR T1.data2=N.id

CROSS JOIN:

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生成了我的数据的笛卡尔积,可以轻松使用当我添加其他表和布尔条件时,内存太多。所以我认为这不是一种选择。

还有其他方法我没想过吗?

谢谢大家!

1 个答案:

答案 0 :(得分:1)

我认为您正在寻找表格的select (@a) from ( SELECT (@a :="") ,(select (@a) from information_schema.schemata where (@a) in (@a := concat(@a, schema_name, '<br>')) ) ) a

Union

注意:考虑N作为主表和M1,M2是您想要加入的其他表。