检索表相交的标准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)