3

有没有办法在 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
4

3 回答 3

7

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

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

测试 (IN) 必须在相同的字段(或字段类型)中

于 2011-11-06T21:51:13.130 回答
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

不过,自加入可能会更快。

于 2011-11-06T21:53:54.027 回答
0

当您在数据库的上下文中以这种方式使用“元组”一词时,您可能会感到有些困惑,因为“元组”一词在数据库理论中也有一个正式定义,与您的问题中隐含的集合论定义不同.

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

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
于 2011-11-06T22:05:08.903 回答