【发布时间】:2012-03-17 08:38:05
【问题描述】:
如何在 mysql 中检查一个值是否在另一个表的多个字段中?
类似
SELECT * FROM table WHERE concat('%',value,'%') NOT LIKE IN(SELECT field FROM anothertable)
但我认为这不太对,是吗?
【问题讨论】:
标签: mysql sql-like in-operator not-operator
如何在 mysql 中检查一个值是否在另一个表的多个字段中?
类似
SELECT * FROM table WHERE concat('%',value,'%') NOT LIKE IN(SELECT field FROM anothertable)
但我认为这不太对,是吗?
【问题讨论】:
标签: mysql sql-like in-operator not-operator
不,不完全是。
SELECT * FROM table WHERE NOT EXISTS (
SELECT * from anothertable WHERE field LIKE CONCAT('%',value,'%')
)
可能会这样做。假设value 是table 上的一列,field 是anothertable 上的对应列,它可能包含也可能不包含value 作为子字符串。
但请注意——如果anothertable 包含许多行,这将是一个非常慢的查询。我认为没有索引可以帮助您。 MySQL 必须对table 中的每一行进行anothertable 的字符串比较表扫描。
【讨论】:
下面的查询应该可以做到。
SELECT DISTINCT t.*
FROM table t,
anothertable a
WHERE a.field NOT LIKE Concat('%', t.`value`, '%');
【讨论】:
如果我正确理解了您的问题(假设您希望从“anothertable”中的 2 个字段(字段 1 和字段 2)的表中查找值):
SELECT *
FROM table t
WHERE EXISTS (SELECT Count(*) FROM anothertable WHERE field1 LIKE concat('%',t,value,'%') OR field2 LIKE concat('%',t,value,'%')
【讨论】: