Sql server SQL Server:将一个表与两个具有相同名称的表联接,但首先从表中选择所有数据(如果可用),否则从第二个表中选择所有数据
我试着在谷歌上搜索这种用例,但确实找到了我想要的东西,所以需要帮助通过有用的答案、文档或任何参考资料来达到特定的目的 我有这样的情况:表A必须与表B和表C合并;B和C具有相似的列,因此在select part中会有重复的列名,但是如果表B的所有数据可用,请为其提供首选项,否则将显示表C中的数据 例如:Sql server SQL Server:将一个表与两个具有相同名称的表联接,但首先从表中选择所有数据(如果可用),否则从第二个表中选择所有数据,sql-server,join,left-join,node-mssql,Sql Server,Join,Left Join,Node Mssql,我试着在谷歌上搜索这种用例,但确实找到了我想要的东西,所以需要帮助通过有用的答案、文档或任何参考资料来达到特定的目的 我有这样的情况:表A必须与表B和表C合并;B和C具有相似的列,因此在select part中会有重复的列名,但是如果表B的所有数据可用,请为其提供首选项,否则将显示表C中的数据 例如: SELECT ae.*, ml.name as name, ml.contact AS contact, ve.name AS name, ve.contact AS conta
SELECT
ae.*, ml.name as name, ml.contact AS contact,
ve.name AS name, ve.contact AS contact
FROM
TABLE ae
LEFT JOIN
TABLE ml ON ae.eid = ml.eid
LEFT JOIN
TABLE ve ON ae.eid = ve.eid
WHERE
ae.eid = 1
ml数据
eid | name | contact
----+------+--------
1 | xyz | null
虚拟企业数据
eid | name | contact
----+------+--------
1 | xyz | 1
声发射数据
eid | gender
----+--------
1 | male
我想要这个结果:
eid | gender | name | contact
----+--------+------+--------
1 | male | xyz | null
但我现在得到的是:
eid | gender | name | contact | contact
----+--------+------+---------+--------
1 | male | xyz | 1 | null
我正在使用节点mssql驱动程序查询SQL Server数据
谢谢,只有在
ml
中没有匹配行时,您才必须加入ve
,并且如果您在ON
子句中添加了条件。。。ml.eid为空
还可以使用
COALESCE()
首先从ml
中选择列,如果它们在ve
中不存在:
SELECT ae.*,
COALESCE(ml.name, ve.name) AS name,
COALESCE(ml.contact, ve.contact) AS contact
FROM ae
LEFT JOIN ml ON ae.eid = ml.eid
LEFT JOIN ve ON ae.eid = ve.eid AND ml.eid IS NULL
WHERE ae.eid = 1
请参阅。结果: 开斋节 性别 名称 接触 1. 男性的 xyz 无效的
在SQL Server中更喜欢
ISNULL
而不是COALESCE
,因为性能原因感谢@forpas分享有用的答案,我知道这很简单,但我对mssql有点陌生,所以无法找到解决方案,再次感谢,它对我有用