检索表格交集的标准SQL查询是什么?

时间:2008-09-29 14:07:19

标签: sql

选择联合:

select * from table1 
union 
select * from table1_backup 

选择交叉点的查询是什么?

9 个答案:

答案 0 :(得分:9)

在SQL Server intersect

select * from table1 
intersect
select * from table1_backup

答案 1 :(得分:6)

SELECT *
FROM table1
WHERE EXISTS
(SELECT *
FROM table1_backup
WHERE table1.pk = table1_backup.pk)

作品

答案 2 :(得分:2)

对于这样的问题,我倾向于回到这个视觉资源:

A Visual Explanation of SQL Joins

答案 3 :(得分:1)

内部联接我认为: 假设T1和T2具有相同的结构:

从中选择T1。* T1内部连接T2在T1.pkField = T2.pkField

答案 4 :(得分:1)

“intersect”也是标准SQL的一部分。

内部联接给出了不同的答案。

答案 5 :(得分:1)

这是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',它是一个交易号列表,而且这两个表形成了一个多表 - 很多关系,因此产生'table1'。现在让我们假装你想知道'another_ table'中的id,它包含第1,2和3项。这就是查询。

答案 6 :(得分:0)

两个相同的表a和b的交叉可以这种方式完成:

SELECT a.id, a.name
FROM a INNER JOIN b
USING (id, name)

答案 7 :(得分:-1)

子查询?真的?

获取table1和table2的交集:

SELECT * FROM table1, table2 WHERE table1.pk=table2.pk;

答案 8 :(得分:-4)

select distinct * from (select * from table1 union select * from table1_backup)