我有兩個表與1:M的關係:帳戶(父母)和'付款'(孩子)。 '付款'表格有一個'類型'的列,其值可以是'已付','將付'或'未付款'。SQL查詢獲取所有帳戶表記錄和它的子記錄
現在我需要編寫一個查詢可以獲取所有帳戶表記錄,它是子記錄。但是在子表中,它應該首先檢查是否存在任何「付費」類型的記錄。如果是,那麼它只會選擇(不是其他類型)。如果「付費」類型記錄不在子表中,則它將檢查「將付款」類型的子記錄並僅提取它們。
我有兩個表與1:M的關係:帳戶(父母)和'付款'(孩子)。 '付款'表格有一個'類型'的列,其值可以是'已付','將付'或'未付款'。SQL查詢獲取所有帳戶表記錄和它的子記錄
現在我需要編寫一個查詢可以獲取所有帳戶表記錄,它是子記錄。但是在子表中,它應該首先檢查是否存在任何「付費」類型的記錄。如果是,那麼它只會選擇(不是其他類型)。如果「付費」類型記錄不在子表中,則它將檢查「將付款」類型的子記錄並僅提取它們。
假設你至少有:
CREATE TABLE account (
id INTEGER NOT NULL PRIMARY KEY
);
CREATE TABLE payment (
account_id INTEGER NOT NULL REFERENCES account(id),
type ENUM ('Paid', 'will-Pay', 'Not-paid')
);
「付費」記錄,並以相同的答案「意志收費」記載:「付費」記錄
SELECT
account.*, payment.*
FROM
account
INNER JOIN payment
ON (payment.account_id = account.id)
WHERE payment.type IN ('Paid', 'will-Pay');
和「意志收費」在不同的答案記錄:
-- Fetch 'Paid' records
SELECT
account.*, payment.*
FROM
account
INNER JOIN payment
ON (payment.account_id = account.id)
WHERE payment.type = 'Paid';
-- Fetch 'will-Pay' records
SELECT
account.*, payment.*
FROM
account
INNER JOIN payment
ON (payment.account_id = account.id)
WHERE payment.type = 'will-Pay';
嘗試:
SELECT p.*
FROM account a
INNER JOIN payment p ON p.account_id = a.id
WHERE p.type = 'Paid' or
(p.type = 'will-Pay' and not exists
(select null from payment p1 where p1.account_id = a.id and p1.type = 'Paid')
)
HI Hochgurgler,我不想單獨獲取Paid或Will-Pay記錄。對於帳戶,可能有許多付款子記錄。假設一個賬戶有3個子支付記錄。第一個孩子記錄具有Will-pay類型,其餘兩個具有Not-Paid類型。現在查詢第一次檢查是否存在任何付費類型記錄。在這種情況下,它不存在。所以它會選擇意願支付類型記錄。但是,如果有任何付費類型記錄存在,那麼它只能選擇該記錄。 – user1173496 2012-02-18 14:47:45