2012-02-17 114 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') 
    )