将另一个 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;