我加入了两个表,Users
和Addresses
。
Users表格有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
这样可行,但只有匹配时才会显示userID。无论是否匹配,我如何获得用户ID?
编辑:下图显示了我当前的查询(左连接)返回的内容:
答案 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中的“关联”将提供所有这些列名称。