Mysql sql查询从两个表中选择-如果一个表中没有结果,则返回另一个表中的结果
我正在运行以下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。(电话
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
或shortLEFT-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'