检查表中是否存在特定元组

时间:2011-11-06 21:41:42

标签: sql sqlite tuples where-in

有没有办法检查where-in语句中的表中是否存在特定元组?

类似的东西:

create table Test(A int, B int);

insert into Test values (3, 9);
insert into Test values (6, 7);
insert into Test values (7, 6);
insert into Test values (3, 4);

select A, B
from Test
where (B, A) in Test;

预期产出:

6|7
7|6

3 个答案:

答案 0 :(得分:6)

你非常接近,“in”子句的后半部分必须是一个选择......所以

SELECT A,B
FROM Test
WHERE (B,A) IN (SELECT B,A FROM Test);

测试(IN)必须位于相同的字段(或字段类型)

答案 1 :(得分:3)

如此加入Test

select t1.A, t1.B
from Test t1
join Test t2 on t1.A = t2.B and t1.B = t2.A

或者使用交叉路口:

select A, B from Test
intersect
select B, A from Test

虽然自我加入可能会更快。

答案 2 :(得分:0)

当你在数据库的上下文中以这种方式使用单词“tuple”时,你可能会得到一些困惑的外观,因为单词“tuple”在数据库理论中也有一个正式的定义,不同于隐含的集合论定义在你的问题中。

如果您正在尝试识别不需要的元组,可以尝试这种方法:

SELECT t1.A, t1.B From Test t1 JOIN Test t2 ON t1.A=t2.B AND t1.B=t2.A WHERE t1.A > t1.B