您好我有一個order_num鏈接的訂單表和付款表。我希望從訂單表中獲得支付類型'A'的支付表中的條目以及支付類型'B'和它們的金額匹配的條目。示例訂單號碼411只能返回給我,如果它至少有兩個付款,其中一個是付款類型「A」,另一個是付款類型「b」,且金額均爲45如何檢查表中是否存在行的類型
謝謝。
您好我有一個order_num鏈接的訂單表和付款表。我希望從訂單表中獲得支付類型'A'的支付表中的條目以及支付類型'B'和它們的金額匹配的條目。示例訂單號碼411只能返回給我,如果它至少有兩個付款,其中一個是付款類型「A」,另一個是付款類型「b」,且金額均爲45如何檢查表中是否存在行的類型
謝謝。
與評論狀態一樣,幾乎沒有什麼信息可以作爲確切的答案。這裏有一個可能的解決方案,至少在一個基本的形式。
SELECT *
FROM Orders o
LEFT JOIN Payment p1 ON o.order_num = p1.order_num
LEFT JOIN Payment p2 ON o.order_num = p2.order_num
WHERE p1.Type = "A"
AND p2.Type = "B"
AND p1.Amount = p2.Amount
完美。這就是我一直在尋找的東西。 – Riz 2010-07-26 16:42:30
只要你能保證最多有一個A和一架B行:
SELECT
<columns here>
FROM
Orders O
INNER JOIN Payments PA ON
PA.order_number = O.order_number AND
PA.payment_type = 'A'
INNER JOIN Payments PB ON
PB.order_number = O.order_number AND
PB.payment_type = 'B'
WHERE
PA.amount = PB.amount
如何:
SELECT o.OrderID,
o.Amount
FROM Order AS o
INNER JOIN Payment AS pA ON pA.OrderID = o.OrderID AND pA.PaymentType = 'A'
INNER JOIN Payment AS pB ON pB.OrderID = o.OrderID AND pB.PaymentType = 'B'
WHERE pA.Amount = pB.Amount
GROUP BY o.OrderID,
o.Amount
我認爲金額在付款表中,並且需要在兩行(A和B)之間相等。 – 2010-07-26 16:44:09
使一些(希望)合理的假設關於表,列等的名稱,如何...
SELECT *
FROM ORDER_TABLE
WHERE EXISTS (SELECT *
FROM PAYMENT_TABLE
WHERE PAYMENT_TYPE = 'A' AND
PAYMENT_TABLE.ORDER = ORDER_TABLE.ORDER AND
PAYMENT_TABLE.AMOUNT = ORDER_TABLE.AMOUNT) AND
EXISTS (SELECT *
FROM PAYMENT_TABLE
WHERE PAYMENT_TYPE = 'B' AND
PAYMENT_TABLE.ORDER = ORDER_TABLE.ORDER AND
PAYMENT_TABLE.AMOUNT = ORDER_TABLE.AMOUNT);
假設金額僅存在於支付表中,並且支付表可能具有多個支付類型的記錄。
select [columns]
from ORDER O
where exists (select null from PAYMENT PA, PAYMENT PB
where PA.PAYMENT_TYPE = 'A'
and PB.PAYMENT_TYPE = 'B'
and PA.ORDER_NUM = O.ORDER_NUM
and PB.ORDER_NUM = O.ORDER_NUM
and PA.AMOUNT = PB.AMOUNT)
你有什麼嘗試嗎? – hgulyan 2010-07-26 16:34:37
到目前爲止,你能向我們展示你的SQL嗎? – DOK 2010-07-26 16:34:54
如果有多種A或B類型的付款,該怎麼辦?那可能嗎?所有A和B付款的總額是否應該相等,或者只有一對?樣本數據和預期結果(涵蓋儘可能多的情況下,你可以想到)將是非常有用的是讓我們來幫助你。 – 2010-07-26 16:35:37