Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.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_Sql Server_Tsql_Join_Coalesce - Fatal编程技术网

SQL Server-具有依赖于第一个或第二个联接的多个联接的查询

SQL Server-具有依赖于第一个或第二个联接的多个联接的查询,sql,sql-server,tsql,join,coalesce,Sql,Sql Server,Tsql,Join,Coalesce,我有一个4个表的查询。它需要通过将第一个表连接到第二个表或第三个表来从第四个表返回值,具体取决于第二个表上的连接是否返回匹配 以下是我在网上查找后尝试的内容: SELECT t1.field1, t4.field1 FROM t1 LEFT JOIN t2 ON t1.field1 = t2.field1 LEFT JOIN t3 ON t1.field1 = t3.field1 LEFT JOIN t4 ON COALESCE(t2.field1, t3.field1) 现在,当

我有一个4个表的查询。它需要通过将第一个表连接到第二个表或第三个表来从第四个表返回值,具体取决于第二个表上的连接是否返回匹配

以下是我在网上查找后尝试的内容:

SELECT t1.field1, t4.field1   
FROM t1
LEFT JOIN t2 ON t1.field1 = t2.field1
LEFT JOIN t3 ON t1.field1 = t3.field1   
LEFT JOIN t4 ON COALESCE(t2.field1, t3.field1)
现在,当t1和t2之间的连接进行匹配时,它只从第四个表返回一个值

有没有办法做到这一点?
提前感谢您的建议

好吧,除了我认为的复制/粘贴错误(上一个连接条件缺少一部分)之外,您的查询应该可以工作:

SELECT t1.field1, t4.field1
FROM t1
LEFT JOIN t2 
    ON t1.field1 = t2.field1
LEFT JOIN t3 
    ON t1.field1 = t3.field1
LEFT JOIN t4 
    ON COALESCE(t2.field1, t3.field1) = t4.field1

好的,除了我认为是copye/paste上的一个错误(它缺少上一个连接条件的一部分)之外,您的查询应该可以工作:

SELECT t1.field1, t4.field1
FROM t1
LEFT JOIN t2 
    ON t1.field1 = t2.field1
LEFT JOIN t3 
    ON t1.field1 = t3.field1
LEFT JOIN t4 
    ON COALESCE(t2.field1, t3.field1) = t4.field1

看起来您的查询应该按原样工作(除了Lamak提到的缺少表达式之外),或者:

SELECT sub.field1, t4.field1
FROM (SELECT t1.field1, COALESCE(t2.field1, t3.field1) as field2
      FROM t1
      LEFT JOIN t2 
         ON t1.field1 = t2.field1
      LEFT JOIN t3 
         ON t1.field1 = t3.field1
     )sub
LEFT JOIN t4
  ON sub.field2 = t4.field1

看起来您的查询应该按原样工作(除了Lamak提到的缺少表达式之外),或者:

SELECT sub.field1, t4.field1
FROM (SELECT t1.field1, COALESCE(t2.field1, t3.field1) as field2
      FROM t1
      LEFT JOIN t2 
         ON t1.field1 = t2.field1
      LEFT JOIN t3 
         ON t1.field1 = t3.field1
     )sub
LEFT JOIN t4
  ON sub.field2 = t4.field1

嗯,睡眠不足和咖啡因会导致这种情况。为了这篇文章的目的,我简化了查询,甚至在这里看不到我的错误。。。谢谢大家指出这一点。好吧,睡眠不足和咖啡因会造成这种情况。为了这篇文章的目的,我简化了查询,甚至在这里看不到我的错误。。。谢谢大家指出这一点。