У меня есть 2 таблицы
+------------+-----------+-----------+
| itemid | version | anything |
+------------+-----------+-----------+
| foo | v0 | blah |
| foo | v1 | blah |
| foo | NULL | blah |
| foo | v2 | meh |
| bar | v0 | meh |
| bar | v1 | 24 |
| baz | NULL | 25 |
| qux | NULL | 26 |
+------------+-----------+-----------+
и
+------------+-----------+-----------+
| itemid | version | something |
+------------+-----------+-----------+
| foo | v0 | weck |
| foo | NULL | wock |
| foo | v2 | weck |
| bar | v0 | meck |
| bar | v1 | cuack |
| baz | NULL | crack |
| qux | NULL | blah |
+------------+-----------+-----------+
Мне нужно объединить обе таблицы по itemid
и version
, поэтому результат будет выглядеть так:
+------------+-----------+-----------+-----------+
| itemid | version | anything | something |
+------------+-----------+-----------+-----------+
| foo | v0 | blah | weck |
| foo | v1 | blah | NULL |
| foo | NULL | blah | wock |
| foo | v2 | meh | weck |
| bar | v0 | meh | meck |
| bar | v1 | 24 | cuack |
| baz | NULL | 25 | crack |
| qux | NULL | 26 | blah |
+------------+-----------+-----------+-----------+
Я делаю
SELECT t1.itemid,
t1.version,
t1.anything,
t2.something
FROM table1 AS t1
LEFT JOIN table2 AS t2
ON t1.itemid=t2itemid AND t1.version=t2.version
Он работает со строками, которые имеют значение версии, но если значение версии NULL
, тогда строки с нулевыми значениями выглядят так:
+------------+-----------+-----------+-----------+
| itemid | version | anything | something |
+------------+-----------+-----------+-----------+
| foo | NULL | blah | NULL |
| baz | NULL | 25 | NULL |
| qux | NULL | 26 | NULL |
+------------+-----------+-----------+-----------+
Я пытался изменить условие соединения с помощью:
ON t1.itemid=t2.itemid AND (t1.version=t2.version OR ((t1.version is null) AND (t2.version is null)))
с точно таким же результатом
Я пытался также изменить условие с помощью:
ON t1.itemid=t2.itemid AND (t1.version=t2.version OR ((isnull(t1.version,'-')) AND (isnull(t1.version,'-'))))
тогда я получаю ошибку: An expression of non-boolean type specified in a context where a condition is expected,near 'AND' [SQL State=S0001, DB Errorcode=4145]
Как я могу объединить строки с одинаковыми itemid
и NULL version
??
РЕДАКТИРОВАТЬ: возможно, это не важно, но в моем реальном запросе table1 и table2 - результаты выбора, и есть третий выбор, который я пропустил для примера, который также содержит itemid и версию.Так что это соединение избранных.