Возвращает все элементы в соединении MySQL, а не только те, которые соответствуют - PullRequest
1 голос
/ 16 октября 2011

checkouts

| item_id | user_id |

items

| item_id |

Я хочу запрос, который вернет ALL ITEMS со столбцом, который, если он существует в извлечениях дляконкретный user_id, он возвращает 1. В противном случае он вернет 0.

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

Проблема в том, что он возвращает только элементы, к которым он присоединяется, а не ВСЕ элементы.

Любые идеи

Ответы [ 3 ]

2 голосов
/ 16 октября 2011

А как же ...

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)
1 голос
/ 16 октября 2011

попробуйте right outer join, например

select * 
from checkouts c
right outer join items i on i.item_id = c.item_id
where c.user_id = 10
1 голос
/ 16 октября 2011

Попробуйте 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...