无法通过连接4个表来获取数据

时间:2014-11-19 21:49:14

标签: mysql sql

我正在尝试通过组合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 ID的列表。然后项目明智,我需要选择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;

我一直试图解决这个问题近两天,并且真的期待一些指导。

我的表中的示例数据如下所示,我期待响应上述查询的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'

1 个答案:

答案 0 :(得分:1)

item_type的加入标准错误。将其更改为:

INNER JOIN item_type ON item_type.id = item_type_map.type_id