我有一个值列表。我试图从该列表中选择表中没有出现的所有值。
例如
var_nos ['Z1234', 'Z1235, 'Z1236']
select *
from db_table
where db_idno not in var_nos
这可能吗?
**阅读后,我不确定这是否有意义。我想从var_nos
返回未出现在POHED中的值。
可能SQL不是处理此问题的最佳方法吗?
答案 0 :(得分:1)
外部联接应该这样做:
with var_nos (no) as ( values ('Z1234'), ('Z1235'), ('Z1236'))
select no
from var_nos
left outer join
db_table
on db_table.db_idno = var_nos.no
where db_table.db_idno is null
可替换地:
select no
from table ( values ('Z1234'), ('Z1235'), ('Z1236')) as var_nos (no)
where not exists (
select 1 from db_table where db_table.db_idno = var_nos.no
)
P.S。未经测试。
答案 1 :(得分:1)
您可以根据需要声明临时表,而不是创建列表。 但是,您可以从以下查询中获得相同的结果。它不如为要从结果中排除的列表创建临时变量那么优雅。
SELECT * FROM db_table
WHERE db_idno NOT IN (SELECT db_idno FROM db_table WHERE db_idno NOT IN ('Z1234', 'Z1235, 'Z1236'))
我在MySQL中对此进行了测试,但它确实有效。让我知道它是怎么回事
答案 2 :(得分:1)
您可以使用'不在'。
select *
from db_table where db_idno not in (
select * from (
select 'Z1234' db_idno
union select 'Z1235'
union select 'Z1236'
) exclude
)
在MySQL上测试。
答案 3 :(得分:1)
您可以在阵列上使用UNNEST将其转换为表格
SELECT *
FROM db_table
LEFT JOIN UNNEST(var_nos AS T(var_nos)) ON T.var_nos = db_table.var_nos
WHERE T.var_nos is null
这只适用于SP。