左连接并显示非外键

时间:2013-07-22 18:10:36

标签: mysql sql join left-join

我加入了两个表,UsersAddresses

Users表格有unique (but not primary) key called userIDAddresses表格有primary key called userID

我正在尝试left-join这些表,以便我从Users表中获取所有信息,无论它在Addresses表中是否匹配,所以我使用了

select * from users u left join addresses a on a.userID = u.userID

这样可行,但只有匹配时才会显示userID。无论是否匹配,我如何获得用户ID?

编辑:下图显示了我当前的查询(左连接)返回的内容:

Test Data

2 个答案:

答案 0 :(得分:1)

使用您提供的查询应在u.userID列中提供结果,无论其是否具有相应的地址。 a.userID列只包含与地址连接的行中的数据。

您可以更改为:

select u.*, a.address from users u left join addresses a on a.userID = u.userID

只会选择address的相关部分并保留整个u

答案 1 :(得分:1)

现在很清楚问题是什么。

查询没有“错误”,只是它返回具有相同别名的多个表达式(列)。其中一个是压倒另一个。 (不是在返回的结果集方面,所有列和行都在那里;问题在于PHP脚本如何处理结果集。如果您通过“关联”引用行中的值(使用列名) ,只引用其中一个列值。

因此,解决这个问题的一种方法是限定查询中的列:

SELECT u.userID
     , u.blah
     , a.userID  AS a_userID
     , a.blah    AS a_blah
  FROM users u 
  LEFT
  JOIN addresses a
   ON ...

这样所有列别名都是唯一的。然后,您的PHP中的“关联”将提供所有这些列名称。