我有一些代码,我在其中选择具有以下任何硬编码的SETID
值的行。这是附加到SQL视图中的附加代码的一部分。
SELECT *
FROM TEST_TABLE1 B
WHERE B.SETID IN ('11000', '18000', '41000', '41001')
除了上面的硬编码值之外,我还想在表SETID
中包含的'90000' and '90999'
范围之间添加另一个更长的PS_LOC_GL
列表。我希望使用BETWEEN
运算符,这样就不必列出该范围内的每个值。我无法找到一种方法来选择两个硬编码值,并一起使用BETWEEN
运算符。
到目前为止,这是我想出的,但是我不相信我可以在SQL视图中使用变量,因此尽管它可以作为本机SQL代码使用,但在我的视图中不起作用:
DECLARE @SET_ID_LIST table (SETID varchar(5))
INSERT @SET_ID_LIST(SETID) VALUES ('11000'), ('18000'), ('41000'), ('41001');
SELECT *
FROM TEST_TABLE1 B
WHERE B.SETID IN (
SELECT SETID FROM @SET_ID_LIST
UNION
SELECT SETID FROM PS_LOC_GL
)
我还有其他选择可以使用硬编码的值列表,也可以使用基于PS_LOC_GL
表的动态列表,其中在{{ 1}}到SETID
范围。
答案 0 :(得分:2)
您可以简单地使用OR
子句:
SELECT *
FROM TEST_TABLE1 B
WHERE B.SETID IN (SELECT SETID FROM PS_LOC_GL /* WHERE SETID BETWEEN ... */)
OR B.SETID IN ('11000', '18000', '41000', '41001')
如果要使用UNION
,请使用(VALUES ...)
子句附加硬编码的值列表:
SELECT *
FROM TEST_TABLE1 B
WHERE B.SETID IN (
SELECT SETID FROM PS_LOC_GL /* WHERE SETID BETWEEN ... */
UNION
SELECT SETID FROM (VALUES
('11000'),
('18000'),
('41000'),
('41001')
) AS v(SETID)
)
答案 1 :(得分:0)
您为什么不OR
还有其他情况? IN
实际上是多个OR
的快捷方式,因此只需附加它即可。
SELECT *
FROM test_table1 b
WHERE b.setid IN ('11000', '18000', '41000', '41001')
OR b.setid IN (SELECT setid
FROM ps_loc_gl);
或通过BETWEEN
操作类似:
SELECT *
FROM test_table1 b
WHERE b.setid IN ('11000', '18000', '41000', '41001')
OR b.setid BETWEEN (SELECT min(setid)
FROM ps_loc_gl)
AND (SELECT max(setid)
FROM ps_loc_gl);