SQL笛卡儿积问题

MySql 码拜 8年前 (2016-02-12) 889次浏览
做一个了数据库查询,显示结果为日期,合计,平均值、其中合计大于100,平均值大于50(单价)
使用到两张表,使用了INNER JOIN连接了两张表的ORDNO订单号,其中EORDER_H提供TOTALAMT(销售数值),EORDER_D提供DNS(单价)
其中EORDER_H中在ORDNO两条订单号对应EHORDDAT中同一日,但是在关联表EORDER_D中ORDNO有三条订单号
现在情况就变成
表H
EHORDNO      EHORDDAT        TOTALAMT
1                 20110311                123
2                 20110311                345
表D
EDORDNO      EHORDDAT
1                  20110311
1                  20110311
2                  20110311
结果就变成了 123*2+345了
多出来了一个123
想问高手这怎么正常解决?
下面为本人代码,仅供参考

SELECT EHORDDAT,SUM(TOTALAMT) AS GS,AVG(TOTALAMT) AS Avga
FROM EORDER_H
INNER JOIN EORDER_D
ON EORDER_H.EHORDNO = EORDER_D.EDORDNO
WHERE DNS>50
GROUP BY EHORDDAT
HAVING SUM(TOTALAMT)>100
解决方案

40

引用 2 楼 Seaaaaaa 的回复:
Quote: 引用 1 楼 yupeigu 的回复:

红色的部分:
SELECT EHORDDAT,SUM(TOTALAMT) AS GS,AVG(TOTALAMT) AS Avga
FROM EORDER_H
INNER JOIN EORDER_D
ON EORDER_H.EHORDNO = EORDER_D.EDORDNO
and EORDER_H.EHORDDAT= EORDER_D.EHORDDAT
WHERE DNS>50
GROUP BY EHORDDAT
HAVING SUM(TOTALAMT)>100

在表D内只有DNS和EDORDNO列,没有EHORDDAT列

那就先把表D去重,然后再关联呢


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明SQL笛卡儿积问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)