MySQL的声明没有返回预期
问题描述:
我有3个表:MySQL的声明没有返回预期
供应商: ID,姓名,地址,郊区,国家,电话,电子邮件,删除
客户: ID,名称,地址,郊区,国家,电话,电子邮件,删除
ACCREDITED_SUPPLIERS: ID,supplier_id,CUSTOMER_ID
我要显示所有的供应商和“标签”那些在ACCREDITED_SUPPLIERS已链接...
这里是我的发言:
SELECT SQL_CALC_FOUND_ROWS s.id, s.name, s.suburb, s.state, s.phone, s.email, s.deleted,
IF(ac.customer_id = '220', 1, 0) AS accredited
FROM suppliers s
LEFT OUTER JOIN accredited_suppliers ac ON ac.supplier_id = s.id
WHERE s.deleted='0'
ORDER BY s.name
此语句只返回10“标记”行
由于某些原因,它缺少3行莫名其妙!
SELECT *
FROM `accredited_suppliers`
WHERE `customer_id` = '220'
返回值:13行
是我上面是否正确?我是否正确地发布它?
答
不要你只是想:
select
s.id AS supplier_id,
IF(a.supplier_id IS NULL, 0, 1) AS accredited
from
SUPPLIERS s
left join
ACCREDITED_SUPPLIERS a
ON
s.id = a.supplier_id AND
a.customer_id = 220;
有我的3个人失踪行!这解决了问题,但原始声明出了什么问题?它只是离开吗? – 2011-04-17 11:28:24
我不太确定你在旧陈述中做了什么=)这很愚蠢......你可能想太难了。评估尽可能简单:我希望所有供应商(FROM),然后可选(LEFT JOIN)匹配认证。听起来像是一个LEFT JOIN。 – Rudie 2011-04-17 11:30:05
不要忘记'WHERE deleted ='0'' ...那里有你的3行:再次失踪? – Rudie 2011-04-17 11:31:12