Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.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四表一记录集_Sql_Join - Fatal编程技术网

SQL四表一记录集

SQL四表一记录集,sql,join,Sql,Join,我错过了什么?我需要返回与姓氏查询匹配的所有记录,无论它们在字段表中是否有客户编号 我调用客户机表两次,因为每个客户机Id都有一个联系号码为0的父级。我需要父记录返回城市、州、邮政编码和公司名称 我尝试过使用recordset.movenext循环,但是查询速度变得非常慢,这使得循环变得不受欢迎 如何查询客户机表,以便在客户机号码可用时包含该号码,在客户机号码缺失时返回该号码 当前结果是与姓氏查询匹配且确实有客户编号的记录。我没有得到任何与姓氏查询匹配但没有客户编号的记录 注意:如果公司没有编号

我错过了什么?我需要返回与姓氏查询匹配的所有记录,无论它们在字段表中是否有客户编号

我调用客户机表两次,因为每个客户机Id都有一个联系号码为0的父级。我需要父记录返回城市、州、邮政编码和公司名称

我尝试过使用recordset.movenext循环,但是查询速度变得非常慢,这使得循环变得不受欢迎

如何查询客户机表,以便在客户机号码可用时包含该号码,在客户机号码缺失时返回该号码

当前结果是与姓氏查询匹配且确实有客户编号的记录。我没有得到任何与姓氏查询匹配但没有客户编号的记录

注意:如果公司没有编号,则该公司在字段_表中没有记录

SELECT A.Contact, 
       A.Id, 
       A.First_Name, 
       A.Last_Name, 
       B.Company_Name, 
       B.City, 
       B.State, 
       FT.Number
FROM Client C 
     INNER JOIN Client B ON A.Id = B.Id 
     LEFT OUTER JOIN Field_Table FT ON B.Id = FT.Id 
     LEFT OUTER JOIN Field_Definitions FD ON FT.Type_Id = FD.Type_Id
WHERE (A.Last_Name LIKE '%Last Name%') 
  AND (B.Contact = 0) 
  AND (FD.Description = 'Customer Number')

您需要将FD.Description部分放在ON join条件中,而不是WHERE子句中

SELECT A.Contact, A.Id, A.First_Name, A.Last_Name, B.Company_Name, B.City, B.State, FT.Number
FROM Client C
INNER JOIN Client B ON A.Id = B.Id
LEFT OUTER JOIN Field_Table FT ON B.Id = FT.Id
LEFT OUTER JOIN Field_Definitions FD ON (FT.Type_Id = FD.Type_Id) AND (FD.Description = 'Customer Number')
WHERE (A.Last_Name LIKE '%Last Name%') AND (B.Contact = 0)

您需要将FD.Description部分放在ON join条件中,而不是WHERE子句中

SELECT A.Contact, A.Id, A.First_Name, A.Last_Name, B.Company_Name, B.City, B.State, FT.Number
FROM Client C
INNER JOIN Client B ON A.Id = B.Id
LEFT OUTER JOIN Field_Table FT ON B.Id = FT.Id
LEFT OUTER JOIN Field_Definitions FD ON (FT.Type_Id = FD.Type_Id) AND (FD.Description = 'Customer Number')
WHERE (A.Last_Name LIKE '%Last Name%') AND (B.Contact = 0)

现在您明白为什么不能在where子句中将对表的引用放在左连接的右侧了吗?原因是将其放在where子句中会将连接转换为内部连接,因为所有记录都必须满足where条件。无论何时使用左联接,对它的唯一引用将起作用并保留联接,即查找空记录,然后在其余联接中提供不在引用表中的记录

现在您明白为什么不能在where子句中将对表的引用放在左侧联接的右侧了吗?原因是将其放在where子句中会将连接转换为内部连接,因为所有记录都必须满足where条件。无论何时使用左联接,对它的唯一引用将起作用并保留联接,即查找空记录,然后在其余联接中提供不在引用表中的记录

非常感谢您的快速回复。在考虑采纳你的建议时,顺便提一下,你的建议确实为我提供了不少见解,我给了我想要的答案。再次感谢您的支持。非常感谢您的快速回复。在考虑采纳你的建议时,顺便提一下,你的建议确实为我提供了不少见解,我给了我想要的答案。再次感谢你的支持,我刚才哭了。卡斯尼,你的解决方案非常有效。非常感谢你!我现在就哭了。卡斯尼,你的解决方案非常有效。非常感谢你!