2016-10-29 2 views
0

Я пытаюсь сделать запрос.Выберите данные, если не существует в другой таблице

три таблицы:

Table A 
id 
id_C 
name 

-

table B 
id 
id_A 
id_X 

-

table C 
id 
name 

Я хотел бы иметь все данные в таблице А, где B.is_A является недействительным и B .id_X имеет значение NULL.

Я пытаюсь с этим запросом

SELECT A.id, A.name 
FROM A 
INNER JOIN C ON (C.id = A.id_C) 
LEFT JOIN B ON (A.id = B.id_A) 
WHERE C.a_column = 3 
AND B.id_A IS NULL 
AND B.id_X IS NULL 

Это возвращение запрос всегда 0.

Как я могу построить запрос, которые возвращают данные мне нужно?

EDIT:

Я даю некоторые данные:

У меня есть три таблицы:

Table prestation 
id | name  | owner_id 
1 | Test | 3 
2 | Toto | 7 
3 | Tutu | 2 
4 | Tata | 2 
5 | Titi | 4 

Table owner 
id  name 
1 | John 
2 | Alice 
3 | Bob 


Table prestation_has_salaried 
id | prestation_id | salaried_id 
1 | 2    | 7 
2 | 5    | 82 
3 | 8    | 82 
4 | 10    | 7 
5 | 29    | 12 

В моей таблице prestation_has_salaried пару prestation_id и salaried_id уникален.

Пытаюсь построить запрос, возвращение из таблицы право ангарии:

Prestation.id | Prestation.name 
3    | Tutu 
4    | Tata 

Потому что мне нужно право ангарии владельца Боба и потому, что prestation_has_salaried не имеет prestation_id 3 и 4 (так prestation_has_salaried.prestation_id равна нулю). Я думаю, что могу построить это с помощью LEFT JOIN, но я бы хотел, чтобы prestation_has_salaried.salaried_id тоже был пустым. Могу ли я получить это в том же запросе? Или, может быть, мне нужно пройти через мой PHP-скрипт?

Мой запрос выглядит следующим образом:

SELECT prestation.id, prestation.name 
FROM prestation 
INNER JOIN owner ON (prestation.owner_id = owner.id) 
LEFT JOIN prestation_has_salaried ON (prestation.id = prestation_has_salaried.prestation_id) 
WHERE owner.id = 3 
AND prestation_has_salaried.prestation_id IS NULL 
AND prestation_has_salaried.salaried_id IS NULL 

Этот запрос возврата 0 линии.

Я надеюсь, что мое объяснение понятно ...

+1

Ваш вопрос не имеет смысла. Во-первых, как вы можете получить строки в * A *, если 'B.id_a' NULL - нет совпадения? Кроме того, в вашем вопросе не упоминается 'C', но ваш пример кода. Пожалуйста, отредактируйте вопрос и укажите образцы данных, желаемые результаты и четкое изложение того, что вы хотите сделать. –

+1

некоторые данные примера необходимы для понимания вопроса. –

+0

показать правильный образец данных и ожидаемый результат. – scaisEdge

ответ

0
SELECT A.id 
     ,A.name 
FROM A 
LEFT JOIN B ON B.id_A = A.id OR B.id_A IS NULL; 
+0

HelloThanks для вашего ответа. Этот запрос не дает ожидаемого результата. С этим запросом у меня будут данные, которые существуют в таблице B. Я хотел бы иметь данные, которых нет в таблице B (B.id_A null и B.id_X null). – gannher

+0

Хотя этот фрагмент кода может решить вопрос, [включая объяснение] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин вашего предложения кода. – andreas

Смежные вопросы