从mySQL表中排除结果

从mySQL表中排除结果,mysql,Mysql,我有一个表t1,其中有一列t1。子组混合ID。有些是简单的数值,有些有前缀:a0 25549844,A04334363,a0565 实际上,像a0433和a0565这样的值实际上对应于另一个表中的433和565 当我得到一组数字ID时,我需要编写一个查询,从t1的结果中排除某些值 SELECT * FROM t1 WHERE t1.group = 2 AND t1.subgroup NOT IN(9844, 433, 565) 我该怎么做 SELECT [your fields] FROM t

我有一个表t1,其中有一列t1。子组混合ID。有些是简单的数值,有些有前缀:a0

25549844,A04334363,a0565

实际上,像a0433和a0565这样的值实际上对应于另一个表中的433和565

当我得到一组数字ID时,我需要编写一个查询,从t1的结果中排除某些值

SELECT * FROM t1 WHERE t1.group = 2
AND t1.subgroup NOT IN(9844, 433, 565)
我该怎么做

SELECT [your fields] FROM t1 WHERE t1.group = 2
AND replace(t1.subgroup,'a0','') NOT IN(9844, 433, 565)
虽然性能可能不是最好的。它还假设mysql对该compairison的字符串到int和int到字符串进行隐式转换,否则替换将需要进行转换

SELECT * FROM t1 WHERE t1.group = 2
AND 
REPLACE(t1.subgroup, 'a0', '') NOT IN (SELECT ThatValue) FROM AnotherTable)
虽然性能可能不是最好的。它还假设mysql对该compairison的字符串到int和int到字符串进行隐式转换,否则替换将需要进行转换

SELECT * FROM t1 WHERE t1.group = 2
AND 
REPLACE(t1.subgroup, 'a0', '') NOT IN (SELECT ThatValue) FROM AnotherTable)
但是,如果任何值为空,则此操作将失败。所以

SELECT * 
FROM 
     t1 
WHERE 
    t1.group = 2
    AND 
    NOT EXISTS (SELECT * FROM AnotherTable A
               WHERE 
               REPLACE(t1.subgroup, 'a0', '') = A.ThatValue)
编辑:添加替换,删除CONCAT

但是,如果任何值为空,则此操作将失败。所以

SELECT * 
FROM 
     t1 
WHERE 
    t1.group = 2
    AND 
    NOT EXISTS (SELECT * FROM AnotherTable A
               WHERE 
               REPLACE(t1.subgroup, 'a0', '') = A.ThatValue)

编辑:添加了REPLACE,删除了CONCAT

显然,您的列t1.subgroup是varchar或类似的(某些文本类型),因此您希望将查询编写为:

SELECT * FROM t1 WHERE t1.group = 2
AND t1.subgroup NOT IN('9844', '433', '565')

显然,列t1.subgroup是varchar或类似的(某些文本类型),因此您希望将查询编写为:

SELECT * FROM t1 WHERE t1.group = 2
AND t1.subgroup NOT IN('9844', '433', '565')