SQL Union SELECT из двух таблиц затем объединить в одну строку - PullRequest
0 голосов
/ 27 января 2019

У меня есть две таблицы (тесты и зарезервированы), которые ссылаются друг на друга, это отношение 1: 1.

Идентификатор одного теста зарезервирован для идентификатора другого теста, который находится в той же таблице, но хранится в зарезервированномТаблица для просмотра.

Вот некоторые примеры данных:

тесты:

test_id | summary_id | ref
    1   |     1      | ref1
    2   |     2      | ref2

зарезервировано:

reserved_id | reserved_summary_id | reserved_for_summary_id
        1   |           1         |           2

В настоящее время я используюUNION, чтобы получить их оба:

SELECT * FROM reserved r, tests t WHERE t.summary_id = r.reserved_summary_id
UNION
SELECT * FROM reserved r, tests t WHERE t.summary_id = r.reserved_for_summary_id

У меня есть скрипка здесь .

Как я могу объединить этот запрос в одну строку?Я пробовал это из SO .Но получите ошибку.

1 Ответ

0 голосов
/ 28 января 2019

Пытаетесь ли вы JOIN сводную таблицу дважды с таблицей tests, чтобы вы могли получить доступ к сведениям о каждом reserved_summary и reserved_for_summary?

Если да, то вам нужно:

SELECT
    r.reserved_id,
    t1.ref ref_of_reserved_summary_id,
    t2.ref ref_of_reserved_for_summary_id
FROM 
    reserved r
    INNER JOIN tests t1 ON t1.summary_id = r.reserved_summary_id
    INNER JOIN tests t2 ON t2.summary_id = r.reserved_for_summary_id

Это вернет что-то вроде:

reserved_id | ref_of_reserved_summary_id | ref_of_reserved_for_summary_id
        1   |           ref1             |           ref2

Вы можете переключиться на LEFT JOIN, чтобы избежать фильтрации записей, где одна из сводок не зарегистрирована в таблице тестов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...