2012-06-11 3 views
0


У меня есть следующие структуры таблицы:Как создать запрос соединения для следующей ситуации?

Item: 
----------------------- 
item_id INT (PRIMARY), 
category_id MEDIUMINT, 
name VARCHAR(40) 

reservation: 
----------------------- 
id INT (PRIMARY), 
item_id INT, 
date DATE, 
slot VARCHAR(50) 

я хочу, чтобы все строки конкретного CATEGORY_ID из таблицы элемент с присоединитесь к столу резервирования на колонке item_id WHERE reservation.date = «что-то», которое будет возвращено в запрос. Нет гарантии, что строка резервирования будет доступна с запрошенной датой. Но мне нужно, чтобы все строки соответствующей category_id возвращались из таблицы Item, даже если строка резервирования отсутствует. Как это можно достичь?

приветствия,
ravi.

ответ

0

Похоже left join будет соответствовать требованиям. Если вы добавите ограничение даты в предложение on, ограничение даты не будет отфильтровывать строки с Item.

select * 
from Item i 
left join 
     reservation r 
on  i.item_id = r.item_id 
     and r.date = '2012-06-11' 
where category_id = 42 
0

Используйте левое соединение. Например, используя SQL Fiddle я придумал:

select * 
from item as i 
left join reservation as r 
    on i.item_id = r.item_id and r.date is not null (where reservation date is set or use r.date = 'date' if you want a specific date) 
where i.category_id = '1'