首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用3个表左连接嵌套select语句

问使用3个表左连接嵌套select语句
EN

Stack Overflow用户
提问于 2016-10-20 06:49:36
回答 1查看 1.9K关注 0票数 2

我不确定有什么更好的办法用三个表格来解决这个问题。也许有一个函数我可以用?

CustID是主要的主键,我需要加入来自Table3的销售数据。根据CustID,销售数据应该附在表格上。问题是来自table3的销售数据没有CustID信息,只有序列号和销售信息。

我如何利用左连接并正确地附加我所需要的?

附带问题:

对于何时可以调用数据进行交叉引用,我有一个错误的理解。

1.)即使嵌套select语句是在嵌套select语句中编码的,我是否可以在查询后面的嵌套select语句之外引用numid?

2.)我是否可以在where语句中生成mysql引用数据,即使我没有在select语句中提取一列数据?(不过,我在from语句中引用了表)。

3.)如果我在from语句中将table2重命名为"tb2“。将来,在嵌套的select语句中,我还会将table2称为"tb2“吗?

谢谢你的帮助。

代码语言:javascript
复制
 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);

我的预期结果如下:

代码语言:javascript
复制
 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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-20 07:19:09

代码语言:javascript
复制
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,则必须检查表的当前名称。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40147330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档