SQL四个表一个记录集
我错过了什么?我需要返回与Last_Name Query相匹配的所有记录,而不管Field_Table中是否有客户编号。SQL四个表一个记录集
我打电话给客户端表两次,因为每个客户端ID都有一个其联系电话号码为0的家长。我需要父记录来返回城市,州,邮编和公司名称。
我试着循环与recordset.movenext但查询变得非常缓慢,这使循环不受欢迎。
如何查询客户表以在客户编号可用时包含客户编号并在缺失时返回?
当前结果是匹配Last_Name查询和DO具有customer_number的记录。我没有得到任何与last_name查询匹配但没有客户编号的记录。
注意:如果公司没有号码,则公司在Field_Table中没有记录。
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连接条件中,而不是在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)
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 B.Id = A.id
AND B.contact = 0
INNER JOIN
Field_Definitions FD
ON FD.Description = 'Customer Number'
LEFT OUTER JOIN
Field_Table FT
ON FT.Type_Id = FD.Type_Id
AND FT.id = B.Id
WHERE A.Last_Name LIKE '%Last Name%'
我现在只是哭了。 Quassnoi,你的解决方案非常完美。 非常感谢! – Jason 2009-07-27 18:38:24
现在你明白为什么你不能把参考表左侧的右侧加入了where子句中?原因在于将它放入where子句中将联接转换为内部联接,因为where条件必须满足所有记录。任何时候使用左连接时,唯一可以工作并保留连接的引用是您正在查找空记录的那个空记录,然后将其中的其他连接的记录提供给不在引用表中的记录。
非常感谢您的快速回复。在努力合并您的建议时,Quassnoi给我提供了我期待的答案。再次感谢您的支持。 – Jason 2009-07-27 18:36:45