0

3 つのテーブルにまたがる複数の結合を含むクエリがあるとします。

SELECT
    main_data.id,
    main_data.dt,
    main_data.seq_num,
    main_data.sale_amt,
    main_data.sale_cd,
    promo.promo_cd,
    payment.card,
    payment.priority
FROM
    main_data
INNER JOIN promo
    ON promo.id = main_data.id
    AND main_data.dt >= promo.start_dt
    AND main_data.dt <= promo_end_dt
INNER JOIN payment
    ON payment.sale_cd = main_data.sale_cd
    AND payment.card = main_data.card
WHERE 
    main_data.dt BETWEEN '2013-10-12' AND '2013-10-12'

基本的に、販売は支払い方法 ( payment) とプロモーション ( promo) に関連付けられています。プロモーション コードを対象となる支払いにマッピングする (1 対多の関係) には、いくつかの問題があります。

この時点で、 からの重複レコードが存在する可能性がありますmain-data。したがって、payment.priority値が最も低い を使用する必要があります。そのフィールドの値が最も低い行だけを抽出するにはどうすればよいですか? これをサブクエリとしてネストしようとしましたが、正しく機能させることができませんでした。データベース自体は完全に静的であり、スキーマを変更することはできません。

4

3 に答える 3

0
SELECT
main_data.id,
main_data.dt,
main_data.seq_num,
main_data.sale_amt,
main_data.sale_cd,
promo.promo_cd,
payment.card,
min(payment.priority)
FROM
main_data
INNER JOIN promo
ON promo.id = main_data.id
AND main_data.dt >= promo.start_dt
AND main_data.dt <= promo_end_dt
INNER JOIN payment
ON payment.sale_cd = main_data.sale_cd
AND payment.card = main_data.card
WHERE 
main_data.dt BETWEEN '2013-10-12' AND '2013-10-12'
group by main_data.id,
main_data.dt,
main_data.seq_num,
main_data.sale_amt,
main_data.sale_cd,
promo.promo_cd,
payment.card
于 2013-11-13T17:12:17.647 に答える