我不确定有什么更好的办法用三个表格来解决这个问题。也许有一个函数我可以用?
CustID是主要的主键,我需要加入来自Table3的销售数据。根据CustID,销售数据应该附在表格上。问题是来自table3的销售数据没有CustID信息,只有序列号和销售信息。
我如何利用左连接并正确地附加我所需要的?
附带问题:
对于何时可以调用数据进行交叉引用,我有一个错误的理解。
1.)即使嵌套select语句是在嵌套select语句中编码的,我是否可以在查询后面的嵌套select语句之外引用numid?
2.)我是否可以在where语句中生成mysql引用数据,即使我没有在select语句中提取一列数据?(不过,我在from语句中引用了表)。
3.)如果我在from语句中将table2重命名为"tb2“。将来,在嵌套的select语句中,我还会将table2称为"tb2“吗?
谢谢你的帮助。
Table1
CustID serialnumber
1 1261
2 6337
3 1412
4 6128
5 1231
Table2
CustID Address Name Joindate
1 xxxx xxx xx/xx/xxx
2 xxxx xxx xx/xx/xxx
3 xxxx xxx xx/xx/xxx
Table3
SerialNumber Purchasedate email Sale
1261 xx/xx/xxxx xx@xx.com $20
1261 xx/xx/xxxx xx@xx.com $30
1261 xx/xx/xxxx xx@xx.com $5.99
1261 xx/xx/xxxx xx@xx.com $5.00
6337 xx/xx/xxxx xx@xx.com $72
1412 xx/xx/xxxx xx@xx.com $5.00
1412 xx/xx/xxxx xx@xx.com $5.00
1412 xx/xx/xxxx xx@xx.com $5.00
6128 xx/xx/xxxx xx@xx.com $5.00
1231 xx/xx/xxxx xx@xx.com $5.00
1261 xx/xx/xxxx xx@xx.com $5.00
select * from Table2
left join
(select
Table1.serialnumber as "num",
Table1.CustID as "numid",
Table3.purchasedate,
Table3.email,
sum(Table3.Sale)
from
Table3, Table1
where Purchasedate between
date(xx/xx/xxxx) and date(xx/xx/xxxx)
and Table3.SerialNumber = num)) tblxxx on CustID using numid)
where joindate between date(xx/xx/xxxx) and date(xx/xx/xxxx);我的预期结果如下:
CustID Address Name Joindate num numid purchasedate email Sale
1 xxxx xxx xx/xx/xx 1261 1 xx/xx/xx x@x.com $390
2 xxxx xxx xx/xx/xx 6337 2 xx/xx/xx x@x.com $72
3 xxxx xxx xx/xx/xx 1412 3 xx/xx/xx x@x.com $15发布于 2016-10-20 07:19:09
SELECT
*
FROM
table2
INNER JOIN table1 ON table1.CustID = table2.CustID
INNER JOIN (
SELECT
SerialNumber,
SUM(Sale) AS sales
FROM
table3
WHERE
Purchasedate BETWEEN date(xx / xx / xxxx)
AND date(xx / xx / xxxx)
GROUP BY
SerialNumber
) AS table3 ON table3.SerialNumber = table1.serialnumber
WHERE joindate BETWEEN date(xx / xx / xxxx) AND date(xx / xx / xxxx);使用table1将table2加入到CustID中。
使用序列号将销售的SUM从按序列号分组的table3加入到table1。通过使用WHERE-clause,您可以指定要考虑哪些销售。
在外部查询中添加‘WHERE’-子句。
2.)我是否可以在where语句中生成mysql引用数据,即使我没有在select语句中提取一列数据?(不过,我在from语句中引用了表)。
是。SELECT和WHERE子句相互独立。您甚至可以在您的WHERE-clause中编写类似于WHERE的东西。类似于SELECT "abcds345234"的东西也很管用。
3.)如果我在from语句中将table2重命名为"tb2“。将来,在嵌套的select语句中,我还会将table2称为"tb2“吗?
你想给一张桌子取个别名。当你试图再次引用它时,你必须注意你是在什么背景下移动的。
如果您在同一个SUBSELECT中,则使用相同的别名来引用它。如果离开了SUBSELECT,则必须检查表的当前名称。
https://stackoverflow.com/questions/40147330
复制相似问题