0

私は2つのテーブルを持っています:
1。マスター

| ID | 名前| 金額|
| ----- | -------- | -------- |
| 1 | a | 5000 |
| 2 | b | 10000 |
| 3 | c | 5000 |
| 4 | d | 8000 |

2.詳細

| ID | MasterID | 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 |

Deatil参加するマスターから選択sum(Amount)したい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 ごとに 2 つのオカレンスがあるため、正確に 2 倍の量が得られます。

デモを見る

使用する

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 関係がないことを確認したい場合。次に、参加する代わりに存在することを試すことができます。

于 2012-07-14T05:24:27.023 に答える