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是否包含%之类的通配符?不,当前它只包含一个要搜索的字符串,这是重新实现的最佳方式:)