将另一个 table 的逐行值转换为字符串并将其插入到 SQL 中的 NOT IN 子句中
Transform line-by-line values from another table to a string and insert it into NOT IN clause in SQL
我正在尝试使用 NOT IN
.
从 'test_user' table 中排除一系列测试用户
我得到了另一个 'member' table,其中包含用户 ID 和其他信息
本来tester用户table不是太长,所以大家用NOT IN
子句通过列出id来排除test用户,但是随着test用户一天比一天多,我想知道是否有任何方法可以使此 NOT IN ()
保持最新且易于维护。
我不确定是否有类似的解决方案:
@declare test_user varchar(23) = select ID from test_user
SELECT * FROM member WHERE ID NOT IN (@test_user)
感谢您的帮助!
您不需要变量...只需将您的查询作为 not in
列表直接插入即可。
SELECT *
FROM member
WHERE ID NOT IN (SELECT ID FROM test_user);
注意:为您的查询使用一致的大小写和布局会让生活变得更轻松。
你能修改 member
table 吗?如果是这样,您可以添加一个新列 is_test_user
。然后你可以使用
查询
SELECT *
FROM member
WHERE is_test_user = 0
如果你这样做,我建议在 is_test_user
上也添加一个索引。
编辑:由于问题已更新,我的回答不再适用。
编辑 2:根据 Bohemian 的建议删除了索引推荐。
您可以按如下方式使用NOT EXISTS
:
SELECT * FROM MEMBER M
WHERE NOT EXISTS
(SELECT 1 FROM TESTUSER T
WHERE T.ID = M.ID)
或者您可以按如下方式使用 LEFT JOIN
:
SELECT M.*
FROM MEMBER M LEFT JOIN TESTUSER T ON T.ID = M.ID
WHERE T.ID IS NULL;
我正在尝试使用 NOT IN
.
我得到了另一个 'member' table,其中包含用户 ID 和其他信息
本来tester用户table不是太长,所以大家用NOT IN
子句通过列出id来排除test用户,但是随着test用户一天比一天多,我想知道是否有任何方法可以使此 NOT IN ()
保持最新且易于维护。
我不确定是否有类似的解决方案:
@declare test_user varchar(23) = select ID from test_user
SELECT * FROM member WHERE ID NOT IN (@test_user)
感谢您的帮助!
您不需要变量...只需将您的查询作为 not in
列表直接插入即可。
SELECT *
FROM member
WHERE ID NOT IN (SELECT ID FROM test_user);
注意:为您的查询使用一致的大小写和布局会让生活变得更轻松。
你能修改 member
table 吗?如果是这样,您可以添加一个新列 is_test_user
。然后你可以使用
SELECT *
FROM member
WHERE is_test_user = 0
如果你这样做,我建议在 is_test_user
上也添加一个索引。
编辑:由于问题已更新,我的回答不再适用。
编辑 2:根据 Bohemian 的建议删除了索引推荐。
您可以按如下方式使用NOT EXISTS
:
SELECT * FROM MEMBER M
WHERE NOT EXISTS
(SELECT 1 FROM TESTUSER T
WHERE T.ID = M.ID)
或者您可以按如下方式使用 LEFT JOIN
:
SELECT M.*
FROM MEMBER M LEFT JOIN TESTUSER T ON T.ID = M.ID
WHERE T.ID IS NULL;