SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 23.09.2010 14:43:02

Герман Клюшин
Участник
Откуда: Севастополь
Зарегистрирован: 17.11.2008
Сообщений: 13

Сложный LEFT JOIN с несколькими таблицами

Вообщем есть такая задача - выбрать все продукты, которые должны прийти в ближайшее время или уже пришли. Проблема в том, что хранятся они в разных таблицах (архитектуру базы делал не я).
То есть я делаю выборку из документов прихода и через LEFT JOIN подключаю таблицу склада. Если в складе NULL значит товары только назначены на приход:

SELECT
   `item`.`id`,
   `item`.`name`
   `item`.`quantity`,
   `warehouse_item`.`id` AS `wid`,
   `warehouse_item`.`arrival_time`,
FROM `item`
LEFT JOIN `warehouse_item` ON warehouse_item.fk_item = item.id


Но проблема в том, что документы могут быть удаленными. То есть мне надо сделать еще INNER JOIN с таблицей job для заголовков документов прихода и с таблицей warehouse (заголовки для документов склада)

Так вот вопрос: как сделать LEFT JOIN между двумя группами таблиц связанных через INNER JOIN?
То есть по логике должно быть так:

SELECT
   `item`.`id`,
   `item`.`name`
   `item`.`quantity`,
   `warehouse_item`.`id` AS `wid`,
   `warehouse_item`.`arrival_time`,
FROM `item`
INNER JOIN job ON item.fk_job = job.id
LEFT JOIN `warehouse_item` ON warehouse_item.fk_item = item.id
INNER JOIN warehouse ON warehouse_item.fk_job = warehouse.id

Но либо я где-то ошибся либо такие связи работают иначе чем кажется на первый взгляд. Средний LEFT JOIN почему-то отрабатывает как INNER


Иисус - Бог неба и земли!

Неактивен

 

#2 23.09.2010 14:51:55

avgsoft
Завсегдатай
Зарегистрирован: 23.09.2010
Сообщений: 36

Re: Сложный LEFT JOIN с несколькими таблицами

условие связывания в последнем join'е неправильно указано(если судить по именам столбцов)?

Отредактированно avgsoft (23.09.2010 14:54:20)

Неактивен

 

#3 23.09.2010 14:57:55

Герман Клюшин
Участник
Откуда: Севастополь
Зарегистрирован: 17.11.2008
Сообщений: 13

Re: Сложный LEFT JOIN с несколькими таблицами

нет, просто имя осталось исторически smile разделили документы на складские/приходные позже, а ключ остался...
Появилась идея сделать просто два LEFT JOIN а потом отсеять лишнии записи через where... Но хотелось бы услышать кого нибудь из мастеров smile

Отредактированно Герман Клюшин (23.09.2010 14:59:48)


Иисус - Бог неба и земли!

Неактивен

 

#4 23.09.2010 15:01:30

avgsoft
Завсегдатай
Зарегистрирован: 23.09.2010
Сообщений: 36

Re: Сложный LEFT JOIN с несколькими таблицами

понятно :-) а как у вас помечаются удаленные документы? или физически записи удаляются? я конечно не мастер :-), но интересно

Отредактированно avgsoft (23.09.2010 15:19:18)

Неактивен

 

#5 23.09.2010 15:15:25

Герман Клюшин
Участник
Откуда: Севастополь
Зарегистрирован: 17.11.2008
Сообщений: 13

Re: Сложный LEFT JOIN с несколькими таблицами

Да, видимо условие из INNER JOIN warehouse ON warehouse_item.fk_job = warehouse.id отсеивает все записи где warehouse_item.fk_job IS NULL.


Иисус - Бог неба и земли!

Неактивен

 

#6 23.09.2010 15:20:39

avgsoft
Завсегдатай
Зарегистрирован: 23.09.2010
Сообщений: 36

Re: Сложный LEFT JOIN с несколькими таблицами

точно, отсеивает, warehouse_item.fk_job к тому моменту уже null(если записи нет в warehouse_item)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson