我有一个使用左联接的查询,我的问题是,如果右表为空,我就无法获得用于ON子句的值,我的意思是;
SELECT members.*,
photos.*
FROM members LEFT JOIN photos on members.member_id = photos.member_id
现在,如果它从照片表返回结果,那就可以了。但当照片表没有结果时,它从成员表返回,但不返回member_id。它返回成员表中的所有其他成员,但不返回member_id
这里的问题是有两个名称相同的列。
尝试重命名一个以避免冲突:
SELECT *, members.member_id AS real_member_id
给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
it returns all others from members table but not member_id
是什么意思?是否返回(null)
?基本上是的,它全部返回成员表中的所有记录,因为您是从左边加入的(成员表)。但如果来自member_id
的记录不存在,则返回null
。您必须为该列指定一个ALIAS
,因为您有两个具有相同名称的字段。
members.member_id AS MemberID
最好在SELECT
列表中明确写入您想要的列:
SELECT members.member_id
members.name,
photos.photo_id,
photos.filename,
...
然后您可以确保没有两列具有相同的名称。这也更好,因为当表的某个结构发生更改时,您的查询将中断,您将很容易找到原因。现在,它被一种意想不到的方式打破了。
如果唯一常用的列是member_id
,并且您确实需要所有的列,那么这也可以:
SELECT *
FROM members NATURAL LEFT JOIN photos