SQL выберите идентификатор, где другие столбцы идентичны - PullRequest
1 голос
/ 27 июля 2011

Если у меня есть таблица свойств с владельцем столбцов, wallColor и roofColor (скажем, один владелец может владеть несколькими домами, но дома могут иметь только одного владельца), как выбрать всех владельцев, у которых есть только дома с одинаковыми стенами ицвета крыши?

Так что, если бы у меня было

owner   wallColor  roofColor
Bob     Red        Green
Bob     Blue       Blue
Greg    Yellow     Yellow
Greg    Black      Black

, он должен вернуть только Грега, потому что у Боба есть дом с красными стенами и зеленой крышей.

Ответы [ 5 ]

2 голосов
/ 27 июля 2011
SELECT DISTINCT owner 
FROM ytable 
WHERE owner NOT IN 
(
    SELECT owner 
    FROM ytable 
    WHERE wallColor <> roofColor
)
2 голосов
/ 27 июля 2011
 SELECT DISTINCT t1.owner
 FROM tablename t1
 WHERE t1.owner NOT IN
 (
    SELECT DISTINCT t2.owner FROM tablename t2
    WHERE t2.wallColor != t2.roofColor
 )
1 голос
/ 01 августа 2011

ВЫБЕРИТЕ РАЗЛИЧНОГО ВЛАДЕЛЬЦА ОТ ... ГДЕ wallcolor = roofcolor КРОМЕ ВЫБЕРИТЕ [ОТЛИЧИТЬ] ВЛАДЕЛЬЦА ОТ ... ГДЕ wallcolor <> roofcolor;

: -)

0 голосов
/ 27 июля 2011

Использование оператора exists:

select *
from table t
where not exists(
    select 1
    from table t1
    where t1.owner = t.owner and t1.wallColor <> t1.roofColor
)
0 голосов
/ 27 июля 2011
SELECT DISTINCT owner FROM table WHERE wallColor=roofColor AND 
owner NOT IN ( SELECT DISTINCT owner FROM table WHERE wallColor<>roofColor )

Это был бы мой подход, но, возможно, потребуется некоторая настройка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...