Запрос SQL для получения всех записей таблиц учетной записи и ее дочерних записей - PullRequest
0 голосов
/ 17 февраля 2012

У меня есть две таблицы с отношением 1: M: счет (родитель) и «оплата» (ребенок). В таблице «Оплата» есть столбец «Тип», значение которого может быть «Оплачено», «Будет платить» или «Не оплачено».

Теперь мне нужно написать запрос, который может получить все записи таблиц учетной записи и их дочерние записи. Но в дочерней таблице он должен сначала проверить, есть ли какая-либо запись типа «Платный» для этой таблицы «Родительский счет». Если да, то он выберет только это (не для других типов). Если запись типа «Платная» отсутствует в дочерней таблице, она проверит наличие дочерних записей типа «будет платить» и получит только их.

Ответы [ 2 ]

1 голос
/ 17 февраля 2012

При условии, что у вас есть как минимум:

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 голосов
/ 17 февраля 2012

Попробуйте:

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')
      )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...