如何 return 具有不同 "where" 值的行在 MySQL 中未被满足

How to return row with diffrent value if "where" has not been met in MySQL

如果一个 table 的 ID 与第二个不匹配,我在接收行时遇到问题。 如果 zamowienia.id_telefon 为空或不匹配,我不会收到整行。 我想改为使用“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

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

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

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

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)