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

Posted

技术标签:

【中文标题】检查表中是不是存在特定元组【英文标题】:Checking if specific tuple exists in table检查表中是否存在特定元组 【发布时间】:2011-12-23 06:09:50 【问题描述】:

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

【问题讨论】:

所以,你想检查例如是否存在 A=6 和 B = 7 的行? 我想找到反转表中也存在的所有行。尽管真正的问题是您是否可以检查元组是否在表中,而不仅仅是列中的值。 如果您不介意实际从表中获取值,则更简单:select A, B from TEST where (A=6 and B=7) or (B=6 and A=7)。如果您有超过 (A,B) 和 (B,A) 的索引,或者至少有 A 和 B 列的单独索引,这将在大表上有效地工作。 问题中的代码似乎对我有用! 【参考方案1】:

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

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

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

【讨论】:

我仍然得到以下信息:Error: near line 10: near ",": syntax error 我猜它是扔在第二个逗号上?试试 ROW(B,A)...(很抱歉我自己无法测试,我没有 SQLite)...【参考方案2】:

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

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

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

【讨论】:

【参考方案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

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

【讨论】:

以上是关于检查表中是不是存在特定元组的主要内容,如果未能解决你的问题,请参考以下文章

Python按整数递归排列并返回一组元组

如何检查列表中是不是有元组?

Python数据类型 ——— 元组

元组的详细操作

使用 AliasableEvalFunc 并在 Java UDF 中读取一组元组

python3元组