MySQL的声明没有返回预期

问题描述:

我有3个表:MySQL的声明没有返回预期

  1. 供应商: ID,姓名,地址,郊区,国家,电话,电子邮件,删除

  2. 客户: ID,名称,地址,郊区,国家,电话,电子邮件,删除

  3. 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; 
+0

有我的3个人失踪行!这解决了问题,但原始声明出了什么问题?它只是离开吗? – 2011-04-17 11:28:24

+0

我不太确定你在旧陈述中做了什么=)这很愚蠢......你可能想太难了。评估尽可能简单:我希望所有供应商(FROM),然后可选(LEFT JOIN)匹配认证。听起来像是一个LEFT JOIN。 – Rudie 2011-04-17 11:30:05

+1

不要忘记'WHERE deleted ='0'' ...那里有你的3行:再次失踪? – Rudie 2011-04-17 11:31:12