[SQL] Написать запрос без вложенных подзапросов
SELECT a.id, b.id, IF( c.b_id IS NULL, 0, 1 )
FROM a, b LEFT JOIN c on ( a.id = c.a_id AND b.id = c.b_id )
Оно?
SELECT a.id, b.id, IF( c.b_id IS NULL, 0, 1 )попахивает каким-то говно-расширением SQL, или я не прав?
![](/images/graemlins/laugh.gif)
![](/images/graemlins/shocked.gif)
DB2BATCH> SELECT a.id, b.id, IF( c.b_id IS NULL, 0, 1 ) FROM a, b LEFT JOIN c on ( a.id = c.a_id AND b.id = c.b_id )
DB2BATCH> @@
SQL0104N An unexpected token "IS NULL" was found following "id, b.id, IF(
c.b_id". Expected tokens may include: "<space>". SQLSTATE=42601
я бы вместо IF(...) попробовал бы coalesce(a_id/a_id, 0) - при условии, что по стандарту null/null == null
И при условии, что a_id != 0
А то было бы красивое решение с одним UNION
SELECT a_id, b_id, 1 FROM c
UNION
SELECT ta.id, tb.id, 0
FROM a as ta, b as tb LEFT JOIN c as tc ON ( ta.id = tc.a_id AND tb.id = tc.b_id )
WHERE tc.a_id IS NULL
Единственное что меня смущает - это неявный JOIN, вложенный в LEFT JOIN.
Знаю, что INNER JOIN не может быть вложенным в LEFT JOIN. А можно ли вкладывать обычный JOIN, хз
Оставить комментарий
pitrik2
есть две таблички A {id,name} B{id,name)между ними связь многие ко многим C{a_id,b_id}
нужно написать запрос, который бы выводил три столбца
1) a_id
2) b_id
3) 1, если есть связь и 0 если нет связи