我对
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
到a
Unique Key
下文(表N):
+------------+---------+--------+-------+
Primary Key Unique ID Data1 Data2
+------------+---------+--------+-------+
1 100002 ... ...
2 103001 ... ...
3 103021 ... ...
4 103022 ... ...
我所需要做的就是提取共享给定唯一项(My)的所有实体
外键
). 例如,给定
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
生成数据的笛卡尔积,在添加其他表和布尔条件时,很容易使用太多内存。所以我认为这不是一个选择。
还有其他我没有想到的方法吗?
谢谢大家!