SQL с условным где - PullRequest
       5

SQL с условным где

0 голосов
/ 02 июля 2019

Может ли кто-нибудь помочь с приведенным ниже запросом?

У меня есть таблица, как показано ниже:

Code        alias   user
--------    -----   -------
7305553     BPP     (null)
8136852     BPP     AYU
8136852     BPP     TKL
7305553     BPFX    (null)
8136848     BPFX    YAO
11903927    CIX     (null)

И я хочу получить значение «Код», передав значения «псевдоним» и «пользователь», однако, когда «пользователь» не совпадает / не существует, мне понадобится строка с нулевым пользователем. Например:

select Code from my_table where alias = 'BPP' and user = 'TEST'

должен вернуть значение кода первой строки (7305553), так как пользователь "TEST" не существует. Возможно ли такое поведение наилучшего соответствия с каким-то условным «где»? (с какой-то постановкой дела?)

Ответы [ 3 ]

2 голосов
/ 02 июля 2019

Попробуйте это:

SELECT
    CODE
FROM
    MY_TABLE
WHERE
    ALIAS = 'BPP'
    AND (USER = 'TEST' OR USER IS NULL)
    ORDER BY USER NULLS LAST
    FETCH FIRST ROWS ONLY

Ура !! * * 1004

0 голосов
/ 02 июля 2019

Получить строку, если псевдоним равен 'BPP', а пользователь равен 'TEST'
OR
Псевдоним равен «BPP» и пользователя IS NULL, а псевдонима «BPP» и пользователя «TEST»

нет.
select code from my_table where 
(alias = 'BPP' and user = 'TEST')
or
(alias = 'BPP' and user IS NULL and NOT EXIST (select 'X' from my_table where alias = 'BPP' and user = 'TEST'))
0 голосов
/ 02 июля 2019

Попробуйте CASE в MySQL:

SELECT
    CODE
FROM
    MY_TABLE
WHERE
    ALIAS = 'BPP'
AND 
    CASE 
        WHEN USER != 'TEST' THEN 1=1 
        ELSE USER = 'TEST'
    END;

Надеюсь, эта помощь.

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