Mysql sql查询从两个表中选择-如果一个表中没有结果,则返回另一个表中的结果

Mysql sql查询从两个表中选择-如果一个表中没有结果,则返回另一个表中的结果,mysql,sql,Mysql,Sql,我正在运行以下SQL查询: SELECT a.retail, b.cost from call_costs a, call_costs_custom b WHERE a.sequence = b.parent AND a.sequence = '15684' AND b.customer_seq = '124' 如果该行存在于call\u costs\u custom中,则返回a.retail和b.cost,但如果该行不存在,我只想使用a的WHERE子句显示a.retail。(电话

我正在运行以下SQL查询:

SELECT a.retail, b.cost 
from call_costs a, call_costs_custom b 
WHERE a.sequence = b.parent 
 AND a.sequence = '15684' 
 AND b.customer_seq = '124'
如果该行存在于
call\u costs\u custom
中,则返回
a.retail
b.cost
,但如果该行不存在,我只想使用
a的
WHERE
子句显示
a.retail
。(电话费)

来自W3Schools:

LEFT JOIN关键字返回左表(表1)中的所有行, 右表(表2)中的匹配行。结果为空 当没有对手时,在右边


您需要一个外部联接,即即使在第二个表中没有匹配项时,也保留第一个表中记录的联接。使用
LEFT-OUTER-JOIN
或short
LEFT-JOIN
因此:

select cc.retail, ccc.cost 
from call_costs cc
left join call_costs_custom ccc on ccc.parent = cc.sequence and ccc.customer_seq = '124'
where cc.sequence = '15684';

你的解释不是100%清楚 但我的尝试是:

SELECT COALESCE(b.cost,a.retail)
FROM call_costs a
LEFT JOIN call_costs_custom b 
ON a.sequence = b.parent 
  AND b.customer_seq = '124'
WHERE a.sequence = '15684' 

您需要一个左连接顺便问一下:
sequence
customer\ seq
字符串?我这样问是因为您比较它们的字符串文本只包含数字。如果列是数字的,则应将它们与数字进行比较:
和a.sequence=15684和b.customer\u seq=124
。这会同时返回这两个值,但如果
call\u costs\u custom
中没有行,则不会返回结果这是因为外部联接未正确写入。外部联接记录上的所有条件都属于
on
子句。正如引用语所说:“当没有匹配项时,右侧的结果为空”。因此,在这种情况下,
b.customer\u seq='124'
永远都不是真的,而你现在的处境只是一个内部连接。编辑以反映托尔斯滕的评论。
SELECT COALESCE(b.cost,a.retail)
FROM call_costs a
LEFT JOIN call_costs_custom b 
ON a.sequence = b.parent 
  AND b.customer_seq = '124'
WHERE a.sequence = '15684'