SQL сравнивает каждую строку со ссылочной строкой - PullRequest
0 голосов
/ 01 ноября 2018

Я пытаюсь сравнить каждую строку из оператора выбора со ссылочной строкой.

Итак, чтобы выразить это в контексте, я бы хотел найти справочную строку, в которой указаны данные учетной записи одного из наших пользователей.

SELECT id, first_name
FROM account
WHERE id = '100'

Возвращает информацию для пользователя

Затем я хочу запустить инструкцию SELECT, чтобы вернуть всех пользователей - довольно просто

SELECT id,first_name
FROM account

Для каждой строки я хотел бы сравнить first_name со ссылочной строкой. Если это то же самое, верните '1', если это не так, верните '0'

Я могу сделать это, если введу значение для сравнения, например, «Пол»

SELECT id,first_name,
CASE
    WHEN first_name = 'Paul' THEN '1'
    ELSE '0'
END
FROM account

Но, очевидно, я хочу заменить Пола на то, что first_name из справочной строки выше.

Мой поиск в Google предполагает, что мне нужно объявить переменную, а затем что-то с помощью SELECT INTO для переменной

DO $$;
Declare
       @reference_first_name   text;
BEGIN
SELECT first_name
into @reference_first_name
FROM account
WHERE id = ‘100’
END;

Но я не могу собрать это вместе.

Тогда, чтобы пойти дальше, можно ли сослаться на несколько столбцов?

Ответы [ 3 ]

0 голосов
/ 01 ноября 2018

Используйте correlated subquery как:

select a.id, a.first_name,
        ( select count(*) 
            from personnel p 
           where p.id = 100 
             and upper(p.first_name) = upper(a.first_name) ) as flag
  from account a;

при условии, что у вас есть таблица с именем personnel и для всех сравнений установлен фиксированный идентификатор.

Rextester Demo

0 голосов
/ 01 ноября 2018

Вот еще один вариант использования outer join:

select a.id, a.first_name, case when a.first_name = b.first_name then 1 else 0 end
from account a
    left join account b on b.id = 100
0 голосов
/ 01 ноября 2018

Вы можете сделать это просто в подзапросе:

демо: дб <> скрипка

SELECT 
    id, 
    first_name, 
    CASE 
        WHEN (SELECT first_name FROM users WHERE id = 100) = first_name THEN 1 
        ELSE 0
    END
FROM users;

Другие способы - использование CTE или JOIN (см. Fiddle для этих версий)

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