左边使用3个表连接嵌套的select语句

时间:2016-10-20 06:49:36

标签: mysql join

我不确定用三个表解决此问题的更好方法。也许有一个我可以使用的功能?
CustID是主要的主键,我需要加入Table3的销售数据。应根据CustID将销售数据附加到表中。问题是来自table3的销售数据没有CustID信息,只有序列号和销售信息。

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

附带问题:

我对何时可以调用数据进行交叉引用有所了解。

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

2.。)即使我没有在select语句中提取数据列,我还能在where语句中创建mysql引用数据吗? (我在from语句中引用了表格。)

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

感谢您的帮助。

hijack

我的预期结果如下:

 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);

1 个答案:

答案 0 :(得分:0)

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);

使用CustID将table1连接到table2。

使用序列号将serialnumber分组的table3的销售额SUM加入table1。通过使用WHERE - 子句,您可以指定要考虑的销售额。

在外部查询中添加'WHERE'子句。

  

2.。)即使我没有在select语句中提取数据列,我还能在where语句中创建mysql引用数据吗? (我在from语句中引用了表格。)

是。 SELECTWHERE子句彼此独立。您甚至可以在1 = 1 - 子句中编写WHERE之类的内容。像SELECT "abcds345234"这样的东西也有效。

  

3。)如果我将from语句中的table2重命名为“tb2”。将来在嵌套的select语句中,我仍然会将table2称为   “TB2”?

您想为表提供别名。在尝试再次引用它时,你必须注意你正在移动的环境。

如果您在同一个SUBSELECT中,则使用相同的别名来引用它。如果您离开SUBSELECT,则必须检查表格的当前名称。