有条件的SQL,

时间:2019-07-02 08:27:45

标签: sql oracle

有人可以协助以下查询吗?

我有一个如下表:

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

我想通过传递“ alias”和“ user”值来检索“ Code”值,但是当“ user”不匹配/不存在时,我需要具有空用户的行。 例如:

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

应返回第一行代码值(7305553),因为用户“ TEST”不存在。是否可以通过某种条件“ where”来实现这种最佳匹配行为? (带有某种案例陈述?)

3 个答案:

答案 0 :(得分:2)

尝试一下:

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

干杯!

答案 1 :(得分:0)

在MySQL中尝试CASE:

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

希望获得帮助。

答案 2 :(得分:0)

如果别名等于“ BPP”并且用户等于“ TEST”,则检索行

别名等于“ BPP”,用户为M+T2,没有别名“ BPP”,用户为“ TEST”

IS NULL