1

我有两个要加入的表,Users并且Addresses.

用户表有一个unique (but not primary) key called userID. Addresses桌子上有一个primary key called userID.

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

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

这可行,但仅在匹配时才显示用户 ID。无论是否匹配,我如何获取用户 ID?

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

测试数据

4

2 回答 2

1

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

您可以更改为:

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

这将只选择 的相关部分address并保留整个u.

于 2013-07-22T18:30:30.953 回答
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 中的“关联”获得。

于 2013-07-22T18:39:46.373 回答