2015-08-14 4 views
2

В базе данных MySQL у меня есть 2 таблицы со следующими примерными данными. Ключ таблицы - переменная_ид.MySQL Слияние двух таблиц с приоритетом

table_1

 
    **variable_id** **release_id** 
    3    10 
    5    10 

table_2

 
    **variable_id** **release_id** 
    1    01 
    2    15 
    3    15 
    4    20 
    5    25 

Я хочу, чтобы иметь возможность объединить две таблицы с рядами в table_1, имеющих приоритет над строками в table_2.

Набор должен быть результат:

 
    **variable_id** **release_id** 
    1    01 
    2    15 
    3    10 
    4    20 
    5    10 

Пожалуйста, помогите мне с MySQL SQL для достижения этой цели. Я попытался сделать объединение левого и правого соединений, но это не сработало.

+0

прохладный вопрос. – Drew

ответ

1

Вы можете взять строки от table_1, а затем union all их дополнительные строки от table_2. Неуклюжим, но должны получить работу:

SELECT * 
FROM table_1 
UNION ALL 
SELECT * 
FROM table_2 
WHERE variable_id NOT IN (SELECT variable_id FROM table_1) 
+0

до тех пор, пока переменная_ид в таблице_1 никогда не равна нулю – Drew

+0

@Drew OP заявила, что «ключ таблицы является переменной_ид». Я предполагаю, что это означает первичный ключ, который по определению не может быть «null». – Mureinik

+0

только для следующего парня, который приходит:> – Drew

1
SELECT table_2.variable_id, 
     IFNULL(table_1.release_id, table_2.release_id) release_id 
FROM table_2 
LEFT JOIN table_1 
ON table_2.variable_id = table_1.variable_id