2014-11-19 4 views
0

Я пытаюсь извлечь данные, объединив 4 таблицы, но не получив желаемых результатов. Ниже приведена моя усеченная структура таблицы.Не удалось получить данные, соединяя 4 таблицы

order_line 
---------- 
id 
item_id --> item_type_map(item_id) 
amount 
quantity 

item_type 
--------- 
id --> item_type_map(type_id)  
category_name 

item_type_map 
------------- 
item_id 
type_id 

international_description 
------------------------- 
foreign_id --> order_line(item_id) 
content 

Каждый элемент (таблица, показанная выше) относится к элементу item_type.
Ввод в запрос будет списком идентификаторов item_type. И тогда предмет мудрый, мне нужно выбрать item_type.category_name, order_line.sum(amount), order_line.sum(quantity), international_description.content.

Я пробовал количество комбинаций, но не смог получить ожидаемые результаты.

Например, один из запроса, который я попытался это: -

select 
    item_type.category_name, 
    order_line.item_id, 
    international_description.content, 
    sum(order_line.amount) as amount, 
    sum(order_line.quantity) as quantity 
FROM order_line 
INNER JOIN item_type_map ON item_type_map.item_id = order_line.item_id 
INNER JOIN item_type ON item_type.id = order_line.item_id 
INNER JOIN international_description 
       ON international_description.foreign_id = order_line.item_id 
WHERE item_type_map.type_id IN (101, 300) 
GROUP BY order_line.item_id; 

Я пытался решить эту проблему в течение почти 2 дней в настоящее время, и с нетерпением жду некоторые рекомендации.

Образец данных в моей таблице выглядит следующим образом, и я ожидаю 3 записи в ответ на вышеуказанный запрос, поскольку есть 3 элемента, которые относятся к 101 и 300 элементам item_types. Но на самом деле я получаю только 2 результата в ответе. Пожалуйста, найдите также ответ на запрос ниже.

order_line 
---------------------------------------------- 
id | item_id | amount  | quantity  
---------------------------------------------- 
'900', '300', '150.0000000000', '1.0000000000' 
'1000', '300', '122.0000000000', '1.0000000000' 
'1004', '300', '1000.0000000000', '1.0000000000' 
'901', '301', '200.0000000000', '1.0000000000' 
'1001', '301', '150.0000000000', '1.0000000000' 
'1101', '101', '100.0000000000', '1.0000000000' 

item_type 
---------------------------- 
id | description 
------------------------------ 
'101', 'Fees' 
'300', 'Adjustments' 

item_type_map 
-------------------------- 
item_id | type_id 
-------------------------- 
'101', '101' 
'300', '300' 
'301', '300' 

international_description 
----------------------------- 
foreing_id | content 
----------------------------- 
'101', 'NSF Fee' 
'300', 'Adjust - Debit' 
'301', 'Adjust - Credit' 

И результат: -

result 
----------------------------------------------------- 
category | item_id | content | amount | quantity 
----------------------------------------------------- 
'Fees', '101', 'NSF Fee', '100.0000000000', '1.0000000000' 
'Adjustments', '300', 'Adjust - Debit', '1272.0000000000', '3.0000000000' 
+0

Опечатка? '..IN (101,300) и group by ...' Я имею в виду и до группы – peppeocchi

+0

К сожалению, это была опечатка. Я только что скорректировал запрос – ivish

+0

Это всего лишь предложение, но вы можете найти такие вещи, которые проще решить, если вместо того, чтобы называть ваши поля первичного ключа просто «id», назовите их [tableName] id или [tableName] _id. – STLDeveloper

ответ

1

Джойн с item_type имеет неправильные критерии. Измените его на:

INNER JOIN item_type ON item_type.id = item_type_map.type_id 
+0

Большое спасибо Амиру. Вот и все. – ivish

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