我希望sql IN运算符在找不到记录时返回null

时间:2018-06-23 10:29:20

标签: mysql sql

如果null运算符值例如

中没有匹配项,我想为每个元素获取in
SELECT name
FROM table
WHERE id IN (1, 2, 3, 4, 5)

在这种情况下,我想获取null值,以防IN运算符值不存在,例如

IN (1, 2, 3, 4, 5)

我希望返回值为

  

“ ABC”,空,“ XYZ”,空,空

当前它仅返回

  

“ ABC”,“ XYZ”

3 个答案:

答案 0 :(得分:1)

只需创建具有所有值的帮助器表:

create table helpTable (uid int);
insert into helpTable values (1),(2),(3),(4),(5);

然后left join,并使用case语句确定是否在有相应值(不是name)时显示null

SELECT case when ht.uid is not null then name end `name`
FROM table t
LEFT JOIN helpTable ht ON t.id = ht.uid;

完成后,DROP TABLE IF EXISTS helpTable;

如果您不想创建表,则可以执行此操作(但我不确定100%会起作用):

SELECT case when ht.uid is not null then name end `name`
FROM table t
LEFT JOIN (
    select 1 `uid`
    union all
    select 2
    union all
    select 3
    union all
    select 4
    union all
    select 5
) ht ON t.id = ht.uid;

答案 1 :(得分:1)

此谓词:

WHERE id IN (1, 2, 3, 4, 5)

只能应用于表中存在的行。 WHERE子句就是这样,它会针对存在的行进行评估,如果条件为真,则该行会包含在查询的结果集中。

谓词无法发明表中不存在的新行。

因此,不能,您不能使用IN ( )在表中缺少ID的地方插入NULL行。

答案 2 :(得分:0)

您可以创建临时表,例如:

None

并使用以下pl / sql过程:

create tmp_table (name varchar2(32);