Sql查询以获取所有科目表记录并将其';儿童档案
我有两个1:M关系的表:Account(父)和Payment(子)。“付款”表有一列“类型”,其值可以是“已付款”、“将付款”或“未付款”Sql查询以获取所有科目表记录并将其';儿童档案,sql,oracle,Sql,Oracle,我有两个1:M关系的表:Account(父)和Payment(子)。“付款”表有一列“类型”,其值可以是“已付款”、“将付款”或“未付款” 现在我需要编写一个查询,它可以获取所有帐户表记录及其子记录。但在子表中,它应该首先检查它的父帐户表是否存在任何“付费”类型的记录。如果是,则只选择该类型(而不是其他类型)。若子表中不存在“已付款”类型的记录,则它将检查“将付款”类型的子记录并仅获取它们 假设您至少有: CREATE TABLE account ( id INTEGER NOT NUL
现在我需要编写一个查询,它可以获取所有帐户表记录及其子记录。但在子表中,它应该首先检查它的父帐户表是否存在任何“付费”类型的记录。如果是,则只选择该类型(而不是其他类型)。若子表中不存在“已付款”类型的记录,则它将检查“将付款”类型的子记录并仅获取它们 假设您至少有:
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';
尝试:
嗨,Hochgurgler,我不想获取付费或将单独付费记录。对于一个帐户,可能有许多付款子记录。假设一个帐户有3个子付款记录。第一个孩子的记录有遗嘱付款类型,其余两个没有付款类型。现在查询第一个检查是否存在任何付费类型记录。在这种情况下,它不存在。所以它会选择付款类型记录。但是,如果存在任何付费类型的记录,那么它必须只选择该记录。
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')
)