Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server:将一个表与两个具有相同名称的表联接,但首先从表中选择所有数据(如果可用),否则从第二个表中选择所有数据_Sql Server_Join_Left Join_Node Mssql - Fatal编程技术网

Sql server SQL Server:将一个表与两个具有相同名称的表联接,但首先从表中选择所有数据(如果可用),否则从第二个表中选择所有数据

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

我试着在谷歌上搜索这种用例,但确实找到了我想要的东西,所以需要帮助通过有用的答案、文档或任何参考资料来达到特定的目的

我有这样的情况:表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 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有点陌生,所以无法找到解决方案,再次感谢,它对我有用