Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql查询以获取所有科目表记录并将其';儿童档案_Sql_Oracle - Fatal编程技术网

Sql查询以获取所有科目表记录并将其';儿童档案

Sql查询以获取所有科目表记录并将其';儿童档案,sql,oracle,Sql,Oracle,我有两个1:M关系的表:Account(父)和Payment(子)。“付款”表有一列“类型”,其值可以是“已付款”、“将付款”或“未付款” 现在我需要编写一个查询,它可以获取所有帐户表记录及其子记录。但在子表中,它应该首先检查它的父帐户表是否存在任何“付费”类型的记录。如果是,则只选择该类型(而不是其他类型)。若子表中不存在“已付款”类型的记录,则它将检查“将付款”类型的子记录并仅获取它们 假设您至少有: CREATE TABLE account ( id INTEGER NOT NUL

我有两个1:M关系的表:Account(父)和Payment(子)。“付款”表有一列“类型”,其值可以是“已付款”、“将付款”或“未付款”


现在我需要编写一个查询,它可以获取所有帐户表记录及其子记录。但在子表中,它应该首先检查它的父帐户表是否存在任何“付费”类型的记录。如果是,则只选择该类型(而不是其他类型)。若子表中不存在“已付款”类型的记录,则它将检查“将付款”类型的子记录并仅获取它们

假设您至少有:

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