2012-01-21 1 views
0

У меня есть две таблицы. Таблица 1 является нашей основной таблицей данных, а таблица 2 имеет поднабор столбцов таблицы 1 и подмножество записей, содержащихся в таблице 1. Таблицу 2 можно увидеть как таблицу с исправленными значениями для некоторых таблиц.MySQL: запрос таблицы и, возможно, замена некоторых полей значениями из другой таблицы

Я хочу запросить одну или несколько записей из этих таблиц, используя следующие правила:

(1) Если Идентификатор пластинки существует только в Table1, я хочу, чтобы получить все столбцы обратно для этой записи (эквивалент select * from Table1 where Table1.id in (1, 2, 3))

(2) Если идентификатор записи существует как в таблице 1, так и в таблице2, то для каждого столбца таблицы 2 значение таблицы2 должно иметь приоритет над соответствующим значением таблицы1. Для всех столбцов таблицы 1, но не в таблице 2, мы возвращаем значения Table1.

Например:

Table1

| id | Column1 | Column2 | Column3 | Column4 | 
---------------------------------------------- 
| 1 | AA-1-1 | AA-1-2 | AA-1-3 | AA-1-4 | 
| 2 | AA-2-1 | AA-2-2 | AA-2-3 | AA-2-4 | 
| 3 | AA-3-1 | AA-3-2 | AA-3-3 | AA-3-4 | 

table2

| id | Column2 | Column4 | 
-------------------------- 
| 1 | ZZ-1-2 | ZZ-1-4 | 
| 3 | ZZ-3-2 | ZZ-3-4 | 

запрашивая записей с идентификатором в (1, 2, 3) должен возвращать:

| id | Column1 | Column2 | Column3 | Column4 | 
---------------------------------------------- 
| 1 | AA-1-1 | ZZ-1-2 | AA-1-3 | ZZ-1-4 | 
| 2 | AA-2-1 | AA-2-2 | AA-2-3 | AA-2-4 | 
| 3 | AA-3-1 | ZZ-3-2 | AA-3-3 | ZZ-3-4 | 

Это возможно придумайте такой запрос? Заранее спасибо!

ответ

1
SELECT table1.id, Column1, IFNULL(table2.Column2, table1.Column2), 
    column3, IFNULL(table2.Column4, table1.Column4) 
FROM table1 
LEFT JOIN table2 ON table1.id = table2.id 
WHERE (table1.id IN (1,2,3)) 

IFNULL(a,b) переводит IF (a IS NULL) then b else a - это вернет второй аргумент, если первый аргумент имеет нулевое значение, в противном случае она возвращает первый аргумент.

+0

может быть добавлен в колонку 2, колонна 4 – rauschen

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