MySQL在LEFT JOIN表达式中更改列

时间:2014-10-22 19:21:30

标签: mysql phpmyadmin

我尝试根据其值使用不同的列。如果列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

我希望这很清楚。

谢谢!

1 个答案:

答案 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