如何在没有所有NULL的情况下获得LEFT JOINED查询结果

时间:2010-11-04 16:45:48

标签: php mysql

我左右连接多个表:

SELECT * FROM table1
LEFT JOIN table2 ON table1.id = table2.fid
LEFT JOIN table3 ON table1.id = table3.fid
LEFT JOIN table4 ON table1.id = table4.fid
LEFT JOIN table5 ON table1.id = table5.fid
LEFT JOIN table6 ON table1.id = table6.fid
WHERE table2.id = '5184'

原因只是因为我尝试了常规JOIN并且没有返回结果,除非表1-6中至少存在一条记录,而这种情况通常并非如此。现在它返回我想要的信息,但问题是很多字段名称重复,当我在PHP中执行'mysql_fetch_array()'时,它会隐藏任何具有重复名称的字段。

我可以做什么类型的查询来避免这种情况?至少,我如何构造查询,使其不包括所有为NULL的双字段?

由于

1 个答案:

答案 0 :(得分:0)

我不禁注意到你没有从左边的连接表中选择任何东西。我的理解是,连接通常用于从辅助表中提取数据,其中这些表中的某些内容与主表中的字段匹配。我从W3 schools

中提取了此示例
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
LEFT JOIN Orders
ON Persons.P_Id=Orders.P_Id
ORDER BY Persons.LastName

除非这是一个拼写错误,否则您将从表1中选择表2中id列= 5186的所有内容。

您声明您的查询返回了您想要的信息,但是有许多空值和覆盖的值。要解决此问题,我会重新构建您的查询以遵循上面显示的典型格式,并确保您正确使用左连接语句。

OP评论后编辑:

你正在从table2命名一个行id,所以我假设你应该从table2中拉出fid开始,其中table2.id = 5186,然后从table1.id = table2.fid的其他表中继续加入。

SELECT table2.fid, table1.id, table3.id, [add other tables here, and revise field names to select the ones you want]
FROM table2
LEFT JOIN table1 ON table1.id = table2.fid
LEFT JOIN table 3 ON table3.fid = table1.id
[add left joins to other tables here]
WHERE table2.id = '5186'

如果这没有帮助,我建议更具体地说明表格所包含的信息以及您要搜索的内容。更多细节可以帮助我们。