检索表相交的标准SQL查询是什么?
时间:2020-03-06 14:52:31 来源:igfitidea点击:
选择联合:
select * from table1 union select * from table1_backup
选择交点的查询是什么?
解决方案
在SQL Server中相交
select * from table1 intersect select * from table1_backup
我认为内部联接:
假设T1和T2具有相同的结构:
从中选择T1. *
T1.pkField = T2.pkField上的T1内部联接T2
"相交"也是标准SQL的一部分。
内部联接给出了不同的答案。
select distinct * from (select * from table1 union select * from table1_backup)
SELECT * FROM table1 WHERE EXISTS (SELECT * FROM table1_backup WHERE table1.pk = table1_backup.pk)
作品
对于类似这样的问题,我倾向于回到该视觉资源:
SQL连接的直观说明
这是mySQL的解决方案:
CREATE TABLE table1( id INT(10), fk_id INT(10), PRIMARY KEY (id, fk_id), FOREIGN KEY table1(id) REFERENCES another_table(id), FOREIGN KEY table1(fk_id) REFERENCES other_table(id) ); SELECT table1.* FROM table1 as t0 INNER JOIN table1 as a ON (t0.id = a.id and fk_id=1) INNER JOIN table1 as b ON (t0.id = b.id and fk_id=2) INNER JOIN table1 as c ON (t0.id = c.id and fk_id=3) ORDER BY table1.id;
基本上,我们有一个数学子集表(即1 = {1,2,3},2 = {3,4,2},...,n = {1,4,7}),带有属性ID,它是设置的数字,而fk_ id则是引用元素表的PRIMARY KEY(超集)(表示花括号中数字的可能值)。对于那些数学上不喜欢的人,让我们假设我们有一个表" other_ table"(一个项目列表)和另一个表" another_ table"(一个事务编号列表),并且两个表形成一个多对-很多关系,因此产生"表1"。现在,让我们假设我们想知道" another_ table"中的ID,其中包含项1、2和3. 这就是执行该操作的查询。
子查询?真的吗?
得到table1和table2的交集:
SELECT * FROM table1, table2 WHERE table1.pk=table2.pk;
可以通过这种方式在两个相同的表a和b上相交:
SELECT a.id, a.name FROM a INNER JOIN b USING (id, name)