使用4个表、左连接和WHERE EXISTS进行MySQL查询
我总共有四(4)张桌子需要处理。本质上,一个从另一个获取数据,而另一个从另一个获取数据,从而获取前面的表数据,等等 我很难获得一个能够在不超时的情况下成功运行的查询。我想显示一种商品的使用4个表、左连接和WHERE EXISTS进行MySQL查询,mysql,join,exists,Mysql,Join,Exists,我总共有四(4)张桌子需要处理。本质上,一个从另一个获取数据,而另一个从另一个获取数据,从而获取前面的表数据,等等 我很难获得一个能够在不超时的情况下成功运行的查询。我想显示一种商品的访问量的总和,以及该商品在给定时间段内的订单月 表格结构 table1 (WebVisits) ID DATE WEBNUMBER VISITS 1 2012-01-01 apw-rtr8 2 .. ... ... .. table2 (Comm
访问量的总和,以及该商品在给定时间段内的订单
月
表格结构
table1 (WebVisits)
ID DATE WEBNUMBER VISITS
1 2012-01-01 apw-rtr8 2
.. ... ... ..
table2 (Commodities)
ID WEBNUMBER TIER1
5791 apw-rtr8 Refrigeration
.. ... ...
table3 (Attributes)
ITEM WEB_NUM
APW-RTR-8 apw-rtr8
.. ...
table4 (SalesData)
ID ITEM QUANTITY UNIT_PRICE TRANS_DATE
31905 APW-RTR-8 1 1522.38 2012-02-05
.. ... ... ... ...
SELECT
MONTH(t1.DATE) AS MONTH,
SUM(t1.VISITS) as Visits,
t2.TIER1 as Category
FROM
table1 t1
LEFT JOIN
table2 t2 ON t1.WEBNUMBER = t2.WEBNUMBER
LEFT JOIN
table3 t3 ON t2.WEBNUMBER = t3.WEB_NUM
WHERE
t1.DATE BETWEEN '2012-01-01' AND '2012-05-31'
AND t3.TIER1 = 'Cooking Equipment '
AND EXISTS( SELECT
sum(t4.UNIT_PRICE * t4.QUANTITY) as total
FROM
table4 t4
WHERE
t4.ITEM = t3.ITEM
AND t4.TRANS_DATE BETWEEN '2012-01-01' AND '2012-05-31')
GROUP BY MONTH
ORDER BY MONTH
基本上,类别(第1层)将已知,日期范围将已知。我希望它给出与上述查询类似的结果:
MONTH Visits Total Category
1 4054 32058.08 Cooking Equipment
2 3564 28116.17 Cooking Equipment
3 4514 25819.66 Cooking Equipment
4 3621 18732.96 Cooking Equipment
5 6521 55378.11 Cooking Equipment
我开始编写查询,并意识到我编写的查询与您编写的查询几乎相同
确保以下索引存在:
table1.DATE
table1.WEBNUMBER
table2.WEBNUMBER
table3.WEB_NUM
table4.ITEM
table4.TRANS_DATE
编辑:
试试这个:
SELECT
MONTH(table1.DATE) AS MONTH,
SUM(table1.VISITS) as Visits,
table2.TIER1 as Category,
SUM(table4.UNIT_PRICE * table4.QUANTITY)
FROM table1
LEFT JOIN table2 USING(WEBNUMBER)
LEFT JOIN table3 table1.WEBNUMBER = table3.WEB_NUM
LEFT JOIN table4 table1.WEBNUMBER = table4.ITEM
WHERE table2.TIER1 = 'Cooking Equipment'
AND table4.TRANS_DATE BETWEEN '2012-01-01'
AND '2012-05-31'
GROUP BY MONTH
ORDER BY MONTH
表1ID
是主要的|表2ID
是主要的,WEBNUMBER
是索引的|表3ITEM
是主要的,webnum
是索引的|表4ID
是主要的|谢谢这是一个很好的开始。我已经按照您的指示添加了索引,查询运行得非常快。我必须在中添加和表2.TIER1='Cooking Equipment'
没问题!我发现我完全错过了WHERE语句和table2.TIER部分,补充了它。所以我做了更彻底的测试,结果并不准确。我的主要目标是简单地跟踪那些在给定时间段内进行访问的产品的销售访问量
,总销售额被夸大了…我相信这与总和
属性有关?