2013-02-11 3 views
1

У меня есть две таблицы, которые объединены с помощью таблицы MAPSQL противоположности присоединиться к

Table ANIMAL: 
+------+--------------+ 
| id | description | 
+------+--------------+ 
| 2 | Ape   | 
| 3 | Lion  | 
+------+--------------+ 


Table MAP: 
+-----------+---------+ 
| animal_id | legs_id | 
+-----------+---------+ 
| 2  | 11  | 
+-----------+---------+ 


Table LEGS: 
+------+--------------+ 
| id |  legs  | 
+------+--------------+ 
| 10 |  4  | 
| 11 |  2  | 
+------+--------------+ 

Мне нужны животные, у которых нет записи карты в таблице НОГ, что-то вроде этого:

!(select * 
    from ANIMAL as a 
    JOIN MAP as m ON (a.id = m.animal_id) 
    JOIN LEGS as l ON (m.legs_id = l.id)) 

который должен дать мне "львиный как результат

+0

Это не противоположна присоединиться. Тема вопроса ... вводит в заблуждение. – Dariusz

ответ

6

Используйте LEFT JOIN

SELECT a.* 
FROM animal a 
     LEFT JOIN Map b 
      On a.id = b.animal_id 
WHERE b.animal_id IS NULL 

Для дальнейшего получить больше знаний о присоединяется, любезно перейдите по ссылке ниже:

+0

@OblTobl вам действительно нужно присоединиться к таблице 'LEGs'? Наверное, нет. –

+0

Это тоже мое мышление ... не нужно даже включать таблицу LEGs, поскольку у нее нет данных, которые соответствуют чему-либо еще в этом контексте ... – SQLGuru

4
Select * from Animal A 
left join Map M on A.id=M.animal_id 
where M.animal_id is null; 
4

Попробуйте это:

SELECT a.* 
FROM animal a 
WHERE a.id NOT IN (SELECT animal_id FROM Map m JOIN Legs l 
        ON m.legs_id = l.id) 
0

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

SELECT 
    * 
FROM 
    Animal 
WHERE 
    animal_id not in (SELECT animal_id FROM Map) 
Смежные вопросы