我有一个使用左连接的查询,我的问题是如果右表是空的我不能得到我正在用于ON子句的值,我的意思是;
SELECT members.*,
photos.*
FROM members LEFT JOIN photos on members.member_id = photos.member_id
现在,如果它从照片表中返回一个结果,那就ok了。但是当照片表没有结果时,它会从成员表返回,但它不会返回member_id。它从members表返回所有其他,但不返回member_id
答案 0 :(得分:4)
这里的问题是你有两个同名的列。
尝试重命名一个以避免碰撞:
SELECT *, members.member_id AS real_member_id
答案 1 :(得分:2)
为members.member_id
提供别名。
SELECT members.member_id as m_id, [other column you want]
FROM members LEFT JOIN photos on members.member_id = photos.member_id
答案 2 :(得分:1)
it returns all others from members table but not member_id
你是什么意思?它正在返回(null)
吗?基本上是的,它全部返回成员表中的所有记录,因为您从左侧(成员表)加入它。但如果member_id
的记录不存在,则返回null
。您必须为该列提供ALIAS
,因为您有两个具有相同名称的字段。
members.member_id AS MemberID
答案 3 :(得分:0)
最好在SELECT
列表中明确地写出您想要的列:
SELECT members.member_id
members.name,
photos.photo_id,
photos.filename,
...
然后您可以确定没有2列具有相同的名称。它也更好,因为当一个表的结构发生变化时,你的查询就会中断,你会很容易找到原因。现在它以意想不到的方式工作了。
如果唯一的常用列是member_id
,并且您确实需要所有列,那么这也会有效:
SELECT *
FROM members NATURAL LEFT JOIN photos