从mySQL表中排除结果
我有一个表t1,其中有一列t1。子组混合ID。有些是简单的数值,有些有前缀:a0 25549844,A04334363,a0565 实际上,像a0433和a0565这样的值实际上对应于另一个表中的433和565 当我得到一组数字ID时,我需要编写一个查询,从t1的结果中排除某些值从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
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')