2011-04-17 112 views
0

我有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行

是我上面是否正確?我是否正確地發佈它?

回答

1

不要你只是想:

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