Возможно ли это присоединение? - PullRequest
0 голосов
/ 30 октября 2018

У меня есть пара таблиц, которые выглядят следующим образом.

table_a     |   table_b
-------------------------
prim_key    |   prim_key
zero_or_one |   value1
valueA      |   value2
valueB      |   value3
valueZ      |

То, что я надеюсь сделать, это извлечь все значения (prim_key, value1, value2, value3) из TABLE B, если первичные ключи каждой таблицы совпадают, и значение zero_or_one in TABLE A is 0.

Я совершенно новичок в joins, и я не совсем уверен, какое объединение мне следует использовать для этого, но кажется, что FULL OUTER JOIN является наиболее подходящим.

SELECT table_b.*
FROM table_a
FULL OUTER JOIN table_b
ON table_a.prim_key = table_b.prim_key

Это вообще возможно?

Использую ли я правильное соединение для работы?

Правильный ли мой синтаксис "выбрать все"?

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Этот ответ не предназначен для реального ответа, он предназначен для имитации FULL OUTER JOIN в MySQL.

FULL OUTER JOIN не поддерживается в MySQL, его можно смоделировать с помощью LEFT JOIN, UNION ALL и RIGHT JOIN

SELECT * FROM table_a LEFT JOIN table_b ON table_a.prim_key = table_b.prim_key
UNION ALL
SELECT * FROM table_a RIGHT JOIN table_b ON table_a.prim_key = table_b.prim_key
WHERE table_a.prim_key IS NULL
0 голосов
/ 30 октября 2018

Так как вы хотите, чтобы записи из table_b только тогда, когда в table_a найден соответствующий первичный ключ; простого Inner Join будет достаточно в этом случае

SELECT table_b.*
FROM table_b
INNER JOIN table_a
  ON table_a.prim_key = table_b.prim_key AND 
     table_a.zero_or_one = 0
...