Mysql 在where like子句中使用子查询

Mysql 在where like子句中使用子查询,mysql,join,subquery,Mysql,Join,Subquery,大家好,我有以下问题: update tblAnimal as p join tblGrouping as tfs on tfs.tblGroupingId = p.tblGroupingId join tblShelter as ses on ses.tblShelterId = tfs.tblShelterId join tblFind as tf on ses.tblFindId = tf.tblFindId set findColor = 'y' where p.animalData

大家好,我有以下问题:

update tblAnimal as p 
join tblGrouping as tfs on tfs.tblGroupingId = p.tblGroupingId
join tblShelter as ses on ses.tblShelterId = tfs.tblShelterId
join tblFind as tf on ses.tblFindId = tf.tblFindId
set findColor = 'y'
where p.animalData like (select searchName from tblSearchCriteria where animalId =       p.tblanimalId) 
or    p.history like (select searchName from tblSearchCriteria where animalId =    p.tblanimalId);
所以我认为,让这个查询只从子查询返回一列是可以的,但是一旦您开始从这个返回查询返回多个值,我们就会开始陷入麻烦

我的问题是,当子查询返回多个列时,实现上述目标的最佳方法是什么;基本上,我想做的是处理搜索条件表中尽可能多的搜索名称,并将与返回的搜索名称匹配的任何搜索名称的findcolor更新为“y”


我希望这是可以理解的。

如果searchName包含像%这样的wilcards,您可以使用连接重写查询:

UPDATE
  tblAnimal as p
  JOIN tblSearchCriteria sc
       ON p.tblanimalId = sc.animalId AND (p.animalData LIKE sc.searchName
                                           OR p.history LIKE sc.searchName)
  JOIN tblGrouping as tfs on tfs.tblGroupingId = p.tblGroupingId
  JOIN tblShelter as ses on ses.tblShelterId = tfs.tblShelterId
  JOIN tblFind as tf on ses.tblFindId = tf.tblFindId
SET
  findColor = 'y'

否则,在尝试更新之前,您可以将LIKE替换为IN。

看看是否可以编写一个返回所需结果集的SELECT。searchName是否包含%之类的通配符?不,当前它只包含一个要搜索的字符串,这是重新实现的最佳方式:)