0

我有两张桌子:
1. Master

| 身份证 | 姓名 | 金额 |
|-----|--------|--------|
| 1 | 一个 | 5000 |
| 2 | 乙 | 10000 |
| 3 | c | 5000 |
| 4 | d | 8000 |

2. 细节

| ID |主ID| PID | 数量 |
|-----|--------|--------|------|
| 1 | 1 | 1 | 10 |
| 2 | 1 | 2 | 20 |
| 3 | 2 | 2 | 60 |
| 4 | 2 | 3 | 10 |
| 5 | 3 | 4 | 100 |
| 6 | 4 | 1 | 20 |
| 7 | 4 | 3 | 40 |

我想sum(Amount)加入DeatilMaster中选择Detail.PID in (1,2,3)

所以我执行以下查询:

SELECT SUM(Amount) FROM Master M INNER JOIN Detail D ON M.ID = D.MasterID WHERE D.PID IN (1,2,3)

结果应该是20000。但我得到40000
这个小提琴。有什么建议吗?

4

2 回答 2

2

你得到的数量正好是两倍,因为详细表对于 WHERE 子句中的每个 PID 都有两次出现。

演示

采用

SELECT SUM(Amount) 
FROM Master M 
WHERE M.ID IN (
  SELECT DISTINCT MasterID
  FROM DETAIL
  WHERE PID IN (1,2,3) )
于 2012-07-14T05:18:53.060 回答
0

当所有列都在主表中时,将主表与详细信息连接起来的要求是什么。

此外,这些表上没有定义任何 FK 关系。查看您的数据,在我看来,MasterId 的详细信息表上应该有 FK。如果是这种情况,那么您根本不需要加入表格。

此外,如果您想确保在详细信息表中有记录需要求和的记录并且没有 FK 关系。然后你可以试试exists而不是join。

于 2012-07-14T05:24:27.023 回答