我是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
声明获得了我需要的一些信息。
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
生成了我的数据的笛卡尔积,可以轻松使用当我添加其他表和布尔条件时,内存太多。所以我认为这不是一种选择。
还有其他方法我没想过吗?
谢谢大家!
答案 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是您想要加入的其他表。