2016-10-20 7 views
0

У меня есть столы: собака, владелец и собака, в которой содержится информация о том, у какого владельца есть собака.MySql выбрать из группы:

___Dog__ _Owner__ ___Dogowner___ 
|id|name| |id|name| |id|dog|owner| 
|1 |dog1| |1 |own1| |1 | 2 | 1 | 
|2 |dog2| |2 |own2| |2 | 1 | 2 | 
         |3 | 2 | 2 | 

И я хочу выбрать только собаку, которую можно выбрать для владельца. Например, у own1 есть собака2, поэтому он должен видеть только собаку. Own2 имеют dog1 и dog2, поэтому он больше не может выбирать.

Я попробовал запрос, который должен возвращать 0 строк, но в результате у меня всегда есть одна строка:

select a.id as id, a.dog as dog from dog a left join dogowner b on a.id=b.dog WHERE b.owner<>'2' group by b.dog 

Может быть, сначала я должен сгруппировать таблицу dogowner, а затем выбрать?

ответ

1

Вы можете использовать не в

select a.id as id, a.dog as dog 
from dog a 
left join dogowner b on a.id=b.dog 
WHERE b.owner<>'2' 
and a.id not in (select c.dog 
      from dogowner c where c.owner = b.owner) 
+1

в этом случае результат будет всегда 0 строк в таблице dogowner полей собаки и владельца всегда установлены –

+0

я есть обновить с помощью не – scaisEdge

0

Вы также можете присоединиться крест собака и владелец, а затем покинул присоединиться DogOwner и искать нулевой DogOwner идентификатор.

SELECT d.id, 
     d.name 
FROM Dog d 
     CROSS JOIN Owner o 
     LEFT JOIN DogOwner do ON do.dog = d.id 
           AND do.owner = o.id 
WHERE do.id IS NULL 
Смежные вопросы