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