Проверка наличия в таблице определенного кортежа - PullRequest
2 голосов
/ 07 ноября 2011

Есть ли способ проверить, существует ли конкретный кортеж в таблице в выражении 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 ]

6 голосов
/ 07 ноября 2011

Вы были очень близки, вторая половина предложения "in" должна быть выбором ... так что

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

Тест (IN) должен быть в тех же полях (или типахполя)

3 голосов
/ 07 ноября 2011

Присоединяйся 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

Самостоятельное объединение, вероятно, будет быстрее.

0 голосов
/ 07 ноября 2011

Когда вы используете слово «кортеж» таким образом в контексте базы данных, вы можете запутаться, поскольку слово «кортеж» также имеет формальное определение в теории баз данных, которое отличается от подразумеваемого определения теории множеств.в вашем вопросе.

Если вы пытаетесь идентифицировать нежелательные кортежи, вы можете попробовать этот подход:

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
...