MySQL: получение данных из нескольких таблиц, допускающих значения NULL со списком идентификаторов - PullRequest
0 голосов
/ 09 октября 2018

У меня есть эти таблицы, которые выглядят так:

таблица 1

|id|value1|value2|value3

таблица 2

|id|value4|value5|value6

Значение идентификатора в каждой таблице уникально, но идентификатор может появиться в таблице 1, но нет в таблице 2. (значение 1 равно значению4, но если идентификатор не отображается в таблице 2, значение4 будет равно нулю ...)

Затем я получил a a ids и хочу когда-нибудь получить что-то вроде (добавив, что id появляется в таблице 1, но нет в 2 и наоборот):

resultgrid | id | value1| value2| value3|value4|value5|value6

|838383|result1|result2|result3|null  |null  |null
|548438|null   |null   |null   |result4|result5|result6

надеюсь, вы, ребята, можете мне помочь, спасибо!

РЕДАКТИРОВАТЬ: запрос, который я пытался (на самом деле это набор собранных частей ответа, которые я вижу впереполнение стека)

SELECT t1.*, t2.value4, t2.value5, t2.value6
FROM table1 as t1
JOIN table2 AS t2 ON t2.id = t1.id
Where t1.id = t2.id = 838383

это вернуло мне 0 возвращенных строк.

Я хочу сделать общим использование списка идентификаторов <2000. </p>

Ответы [ 2 ]

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

Вы хотите full outer join, который MySQL не поддерживает.В вашем случае вы можете эмулировать это с помощью left join:

select t1.*, t2.value4, t2.value5, t2.value6
from (select 838383 as id
     ) i left join
     table1 t1
     on t1.id = i.id left join
     table2 t2 
     on t2.id = i.id;

Список идентификаторов, которые вы хотите сохранить, находится в подзапросе i.

0 голосов
/ 09 октября 2018
  • Вы можете использовать два разных запроса Select, используя Left join между двумя таблицами.В первом запросе рассмотрим table1 как крайнюю левую таблицу;и table2 как самый левый во втором запросе.
  • Используйте Where <right table id> IS NULL для фильтрации строк, в которых нет соответствующей записи в самой правой таблице.
  • Используйте Union для объединения результатов.Поскольку дубликатов не будет (из-за результатов нашего запроса), мы можем использовать Union All.

Попробуйте выполнить следующее:

SELECT t1.id, t1.value1, t1.value2, t1.value3, 
              t2.value4, t2.value5, t2.value6 
FROM table1 AS t1 
LEFT JOIN table2 AS t2 ON t2.id = t1.id 
WHERE t2.id IS NULL 

UNION ALL 

SELECT t2.id, t1.value1, t1.value2, t1.value3, 
              t2.value4, t2.value5, t2.value6 
FROM table2 AS t2 
LEFT JOIN table1 AS t1 ON t1.id = t2.id 
WHERE t1.id IS NULL 
...