Я пытаюсь извлечь данные, объединив 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'
Опечатка? '..IN (101,300) и group by ...' Я имею в виду и до группы – peppeocchi
К сожалению, это была опечатка. Я только что скорректировал запрос – ivish
Это всего лишь предложение, но вы можете найти такие вещи, которые проще решить, если вместо того, чтобы называть ваши поля первичного ключа просто «id», назовите их [tableName] id или [tableName] _id. – STLDeveloper