2013-11-20 2 views
0

запрос возвращает отличные результаты, когда invstorelocation. Description AS Адреса, не включенные в запросе вместе с присоединитьсявыборка данных из разных таблиц на основе разных объединений в одном запросе

INNER JOIN 
    `invstorelocation` 
ON (`invlabtes`.`StockLocCode` = `invstorelocation`.`Code`) 

Но когда я включаю это соединение в запросе таблица возвращает пустой, даже если все условия будут полностью соблюдены. Plz упоминает альтернативу выборке записи местоположения наряду с другими записями.

SELECT 
`invlabtes`.`CommAppCode` , 
`invlabtes`.`Code` , 
`invlabtes`.`GatePassNO` , 
`invlabtes`.`VehicleNo` , 
`invlabtes`.`SupplierCode` , 
`invstorelocation`.`Description` AS Location , 
`invstore`.`Description` AS MaterialName 
FROM 
    `invlabtes` 
INNER JOIN 
    `invstorelocation` 
ON (`invlabtes`.`StockLocCode` = `invstorelocation`.`Code`)   
INNER JOIN 
    `invgatepass` 
ON (`invlabtes`.`GatePassNO` = `invgatepass`.`InwardNo`) AND (`invlabtes`.`GatePassDate` = `invgatepass`.`EntryDate`) AND (`invlabtes`.`VehicleNo` = `invgatepass`.`VehicleNo`) 

INNER JOIN 
    `invgatepasssubtable` 
ON (`invlabtes`.`GatePassNO` = `invgatepasssubtable`.`InwardNo`) AND (`invlabtes`.`ItemCode` = `invgatepasssubtable`.`ItemCode`) 

INNER JOIN 
    `invstore` 
ON (`invgatepass`.`StoreCode` = `invstore`.`Code`) 

WHERE (`invlabtes`.`Code` LIKE '%%' OR `invlabtes`.`CommAppCode` LIKE '%%' OR `invlabtes`.`GatePassNO` LIKE '%%' OR `invlabtes`.`VehicleNo` LIKE '%%' OR `invlabtes`.`SupplierCode` LIKE '%%') AND `invlabtes`.`CommAppCode`<>'' AND `invlabtes`.`Unit_Code`='1' LIMIT 100; 

Этот запрос успешно возвращает данные. Вышеупомянутый запрос имеет проблему.

+3

Вы уверены, что вы знаете, что этот запрос должен делать? – asprin

+0

да этот запрос извлекает данные из таблицы invlabtes и invstore table на основе соответствия записей в таблице invgatepass и invgatepasssubtable. Я также хочу получить соответствующее описание местоположения из таблицы invstorelocation. –

+2

. Нам действительно нечего исследовать, не имея ваших данных. Извините, но если вы не получаете никаких строк, то ясно, что все условия *** не полностью выполнены. БД не просто отказываются отображать данные. Условия включают условия соединения, и единственный способ понять это - это разобраться и выяснить, почему условия не выполняются при добавлении соединения. Это может быть проще сделать, изменив это соединение, из-за чего он не сможет подключиться к внешнему соединению и посмотреть на записи. – David

ответ

0

Принимая то, что вы говорите по номинальной стоимости, то окажется, что нет invstorelocation строки, в которых invstorelocation.Code сопоставлено invlabtes.StockLocCode значения для ограничений, которые вы указали.

Попробуйте выбрать только invlabtes.StockLocCode т.е. SELECT invlabtesFROM StockLocCode

Затем попробуйте выбрать Code из invstorelocation т.е. SELECt Code FROM invstorelocation

Проверьте, какие значения соответствуют, и если они делают, chekc если они были отфильтрованы WHERE статья?

К сожалению, без данных это было бы трудно диагностировать.

+0

сэр plz снова прочитал вопрос. у invstore нет проблем в запросе. только 'invstorelocation'.'description' не возвращает данные. когда запрос выполняется без этого единственного соединения, он возвращает успешные совпадения. Только проблема связана с 'invstorelocation' –

+0

. Я поправлю свою рекомендацию соответствующим образом, но это тот же совет, только разные таблицы/столбцы ... –

+0

Извините, что имя таблицы было неправильным, поэтому правильное имя было invunloadinglocation, а не invstorelocation. –

0

Попробуйте

LEFT OUTER JOIN 
`invstorelocation` 
ON (`invlabtes`.`StockLocCode` = `invstorelocation`.`Code`) 

При использовании INNER JOIN и таблица пуста, она не будет возвращать никаких результатов

+0

Он работал, когда я попробовал ваше решение (я получил нулевые значения в поле «Место» в наборе результатов). но проблема в том, что таблица 'invstorelocation' не пуста и имеет в ней соответствующие записи. Я вручную проверил это. Пожалуйста, укажите, где я ошибаюсь, в том, что касается фальсификации запроса, или я делаю неправильную логику в запросе. –

+0

Моя проблема решена. Запрос успешно завершен. Проблема была Имя таблицы было invunloadinglocation, и я использовал неправильное имя i.e invstorelocation Thanx всем, кто ответил –

Смежные вопросы