已经有很多left join个问题,但我仍然不能完全理解这个问题。移动时,WHERE条件看起来不合理。
问题是应该返回4行,但只有1行。
在检查左连接条件时,每个左连接返回1行,这对于表中的记录数是正确的,但是下面的查询返回1条记录而不是4条,但是我看不清楚返回4,但是。
查询如下:(给出1个结果不是4;预期4个)
SELECT
list.uid,
list.business_uid,
list.creator_name,
business.company_name,
list_alias.uid AS list_alias_uid,
list_alias.alias AS list_alias,
list_member.uid AS list_member_uid,
mailbox.full_name AS list_member_name,
mailbox.email_address AS list_member_email_address
FROM
mailbox,
business,
list
LEFT JOIN
list_alias ON list_alias.list_uid=list.uid
LEFT JOIN
list_member ON list_member.list_uid=list.uid
WHERE
list.business_uid='1'
AND list.business_uid=business.uid
AND mailbox.uid=list_member.mailbox_uid
ORDER BY
list.full_name ASC
数据:
商业UID 1有4个列表
SELECT * FROM list WHERE business_uid=1
- 提供4个结果
SELECT * FROM list_alias WHERE list_uid IN (SELECT uid FROM list WHERE business_uid=1)
- 给出1个结果
SELECT * FROM list_member WHERE list_uid IN (SELECT uid FROM list WHERE business_uid=1)
- 给出1个结果
欢迎任何有关我可以检查的内容的指示。
表格样本数据:
列表:
uid | business_uid | creator_name | full_name
--------------------------------------------------
1 1 List Maker Subscribe to W
2 1 List Maker Subscribe to X
3 1 List Maker Subscribe to Y
4 1 List Maker Subscribe to Z
业务:
uid | company_name
-------------------
1 List Company
list_alias:
uid | list_uid | alias
----------------------------------------
1 1 subscriber@list-url.com
LIST_MEMBER:
uid | list_uid | mailbox_uid
------------------------------------
1 1 1
邮箱:
uid | full_name | email_address
-------------------------------
1 I am He me@me.com
答案 0 :(得分:1)
尝试使用单一的连接方法,就像这样。
SELECT list.uid,
list.business_uid,
list.creator_name,
b.company_name,
la.uid AS list_alias_uid,
la.alias AS list_alias,
lm.uid AS list_member_uid,
m.full_name AS list_member_name,
m.email_address AS list_member_email_address
FROM list LEFT JOIN list_member lm ON lm.list_uid=list.uid
LEFT JOIN mailbox m ON m.uid=lm.mailbox_uid
LEFT JOIN business b ON list.business_uid=b.uid
LEFT JOIN list_alias la ON la.list_uid=list.uid
WHERE list.business_uid=1
ORDER BY list.full_name ASC
答案 1 :(得分:0)
问题:'list'表中'uid'的值是多少?因为'uid'与'business_uid'不同。我的意思是......
如果'list'表有这个......
'uid''business_uid' 1 1 2 1 3 1 4 1
那就是问题所在。您将返回相同的'busines_uid'但不同的'uid',这意味着它只会匹配第一条记录。