2011-10-16 75 views
1

檢出返回上一個MySQL連接,而不僅僅是那些匹配

| item_id | user_id | 

項目

| item_id | 

我想要一個查詢,將返回所有項目與一列以外的所有項目,如果它存在於一個特定的user_id結賬中,它返回一個1.否則它將返回一個0.

select * 
from checkouts 
right join items on items.item_id = checkouts.item_id 
where checkouts.user_id = 10 

的問題是,它只返回它連接上的項目,不是所有的項目。

任何想法?

回答

2

怎樣......

SELECT i.item_id, c.user_id, IF(c.user_id IS NULL, 0, 1) AS extra_column 
FROM items i 
LEFT JOIN checkouts c ON (c.item_id = i.item_id AND c.user_id = 10) 
+0

將無法​​正常工作。你需要'c.user_id是null'作爲條件之一...否則,'左join'是毫無意義的。 –

+0

你還可以添加對'on'條款,條件,它應該工作我想:'上(c.item_id = i.tiem_id和c.user_id = 10)' –

+1

@PabloSantaCruz,是的,感謝沒收。根據您的建議更新。 – imm

1

嘗試left outer join

select * from items left outer join checkouts using (item_id) 
where checkouts.user_id is null or checkouts.user_id = 10 

另外,您還可以使用:

select * from items i 
    left outer join checkouts c 
    on (i.item_id=c.item_id and c.user_id=10) 
1

嘗試right outer join,例如

select * 
from checkouts c 
right outer join items i on i.item_id = c.item_id 
where c.user_id = 10 
相關問題