2012-02-17 86 views
0

我有兩個表與1:M的關係:帳戶(父母)和'付款'(孩子)。 '付款'表格有一個'類型'的列,其值可以是'已付','將付'或'未付款'。SQL查詢獲取所有帳戶表記錄和它的子記錄

現在我需要編寫一個查詢可以獲取所有帳戶表記錄,它是子記錄。但是在子表中,它應該首先檢查是否存在任何「付費」類型的記錄。如果是,那麼它只會選擇(不是其他類型)。如果「付費」類型記錄不在子表中,則它將檢查「將付款」類型的子記錄並僅提取它們。

回答

1

假設你至少有:

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'; 
+0

HI Hochgurgler,我不想單獨獲取Paid或Will-Pay記錄。對於帳戶,可能有許多付款子記錄。假設一個賬戶有3個子支付記錄。第一個孩子記錄具有Will-pay類型,其餘兩個具有Not-Paid類型。現在查詢第一次檢查是否存在任何付費類型記錄。在這種情況下,它不存在。所以它會選擇意願支付類型記錄。但是,如果有任何付費類型記錄存在,那麼它只能選擇該記錄。 – user1173496 2012-02-18 14:47:45

0

嘗試:

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') 
    )