Как проверить один столбец запроса с несколькими столбцами подзапроса? - PullRequest
0 голосов
/ 07 апреля 2019

Я пытаюсь сравнить, если один столбец моей таблицы равен тому, что подзапрос возвращает в нескольких столбцах. Я хочу иметь возможность возвращать строки, если table1.id равен одному из table2.first или table2.second. Какой будет правильный синтаксис для этого?

Я пробовал то, что ниже, но это неверный синтаксис, так как я получаю "Результат: дополнительный выбор возвращает 2 столбца - ожидается 1."

SELECT table1.id, table1.attr1, table1.attr2 FROM table1 WHERE table1.id IN (SELECT table2.first, table2.second FROM table2 WHERE type != "..." AND type != "someType")

Ответы [ 3 ]

0 голосов
/ 07 апреля 2019

Вам не нужен подзапрос, если вы хотите выбрать из t1, только если условия совпадают. Попробуйте ниже запрос:

SELECT
    t1.id,
    t1.attr1,
    t1.attr2
FROM table1 t1 , table2 t2
WHERE
    (t1.id = t2.first OR t1.id = t2.second)
    AND t2.type not in ('someType' , "...");
0 голосов
/ 07 апреля 2019

Вы можете сделать это с помощью внутреннего соединения:

SELECT DISTINCT t1.id, t1.attr1, t1.attr2 
FROM table1 t1 INNER JOIN table2 t2
ON t2.first = t1.id OR t2.second = t1.id
WHERE t2.type <> "..." AND t2.type <> "someType"

Предложение ON может быть записано так:

ON t1.id IN (t2.first, t2.second)

Я использовал DISTINCT на случай, если table1.id может соответствовать нескольким строкам в table2.

0 голосов
/ 07 апреля 2019

Возможно, вы намереваетесь что-то вроде этого:

SELECT
    t1.id,
    t1.attr1,
    t1.attr2
FROM table1 t1
WHERE
    EXISTS (SELECT 1 FROM table2 t2 WHERE t2.first = t1.id AND type <> 'someType') OR
    EXISTS (SELECT 1 FROM table2 t2 WHERE t2.second = t1.id AND type <> 'someType');

Каждое предложение EXISTS проверяет возможное совпадение значения table1.id со столбцом table2.

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