Как я могу написать этот запрос для точного значения с таблицей с несколькими внешними ключами? - PullRequest
0 голосов
/ 04 марта 2020

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

 table_1:

   id                 
   1       
   2

 table_2:

   id   table2_order
   1        1
   2        1
   2        2 

table_3:

 id     table2_order     order     code
 1          1              1        52   
 1          1              2        52
 2          1              1        69
 2          1              2        52
 2          2              1        01        

Чтобы объединить эти таблицы следующим образом:

SELECT * FROM table_1 t1
LEFT JOIN table_2 t2 ON t1.id = t2.id
LEFT JOIN table_3 t3 ON t2.id = t3.id AND t2.table2_order = t3.table2_order
WHERE t3.code = '52'

Как я могу получить все значения, которые также равны 52, а не 69? Они ищут значение 52. Поэтому им нужны идентификаторы только с кодом 52. И они могут искать от одного до многих кодов. Должны быть только коды. Здесь я хочу получить id = 1, но не id = 2, потому что у него 69.

1 Ответ

1 голос
/ 04 марта 2020

Имеет только 52

SELECT * FROM table_1 t1
LEFT JOIN table_2 t2 ON t1.id = t2.id
LEFT JOIN table_3 t3 ON t2.id = t3.id AND t2.table2_order = t3.table2_order and t3.code = '52'
LEFT JOIN table_3 no ON t2.id = no.id AND t2.table2_order = no.table2_order and no.code <> '52'
WHERE no.id is null

Это называется анти-объединением. Это означает, что вы получаете результаты только для идентификаторов, которые имеют code = 52 и не имеют code != 52.

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