如果MySQL中未满足“ where”,如何返回具有不同值的行

时间:2019-02-13 18:15:56

标签: mysql sql if-statement join where

如果来自一个表的ID与第二个表不匹配,则我在接收行时遇到问题。 如果zamowienia.id_telefon为null或不匹配,我不会接收整行。 我想改为获取具有“ 0”或空值的列crm2018.telefon.numer。请帮忙:)

我尝试了类似的方法,但是语法明显错误:

SELECT 
    crm2018.zamowienia.*,
    crm2018.telefon.numer 
FROM
    crm2018.zamowienia 
    JOIN crm2018.telefon 
WHERE
    if (zamowienia.id_telfon != "0")  zamowienia.id_telefon = telefon.id_telefon else crm2018.telefon.numer as "0"

这是工作代码,但缺少行。

SELECT 
    crm2018.zamowienia.*,
    crm2018.telefon.numer 
FROM 
    crm2018.zamowienia 
    JOIN crm2018.telefon 
WHERE 
    zamowienia.id_telefon = telefon.id_telefon

1 个答案:

答案 0 :(得分:0)

只需使用LEFT JOIN而不是(INNER)JOIN。

因此,您需要将联接条件从WHERE子句移到联接的ON子句,以避免滤除不匹配的记录。请注意,查询实际上是一个不带ON子句的JOIN:这是所有SQL方言中的语法错误。

最后,我建议在查询中使用表别名:这样可以更易于阅读和维护。

SELECT 
    z.*,
    t.numer 
FROM
    crm2018.zamowienia AS z 
    LEFT JOIN crm2018.telefon AS t
        ON z.id_telefon = t.id_telefon

如果给定crm2018.zamowienia的crm2018.telefon中没有可用记录,则该记录仍将显示,来自crm2018.telefon的所有列均显示NULL值。

如果需要,您可以使用COALESCE()函数将NULL值设为0,例如:

COALESCE(t.numer, 0)