我尝试根据其值使用不同的列。如果列A为null,则使用列B.
问题是,这是在LEFT JOIN
表达式中:
SELECT *
FROM
novinarji
LEFT JOIN naslovi ON novinarji.stalniNaslovId=naslovi.id
LEFT JOIN posta ON naslovi.postaId=posta.id
WHERE
posta.stPoste = 3000
当第一列为novinarji.stalniNaslovId
时,我需要novinarji.zacasniNaslovId
更改为NULL
。
我希望这很清楚。
谢谢!
答案 0 :(得分:1)
您不一定需要在加入ON
条件中使用onyl文字列名。连接的ON
条件需要产生真实的布尔表达式。因此,您可以在加入条件中使用COALESCE()
来返回首选列,如果首选项为NULL
,则可以使用备用列。
-- Careful with SELECT * in a join query...
-- better to be specific about the needed column names
SELECT *
FROM
novinarji
-- COALESCE() will return stalniNaslovId if non-null, and zacasniNaslovId otherwise
LEFT JOIN naslovi
ON COALESCE(novinarji.stalniNaslovId, novinarji.zacasniNaslovId) = naslovi.id
LEFT JOIN posta
ON naslovi.postaId=posta.id
-- Move this condition to the ON clause, otherwise it turns
-- your LEFT JOIN into an INNER JOIN if filtered in the WHERE
AND post.stPoste = 3000