MySQL WHERE IN通配符

时间:2013-04-22 15:53:27

标签: mysql where

首先,我知道downloads表未规范化。

我有两张桌子:

downloads

map | author
1 | Nikola
2 | Nikola George

mappers

mapper_id | mapper_name
1 | Nikola
2 | George

我想找到他的ID找到给定用户的所有可能的下载行。

我所做的是:

SELECT * FROM downloads WHERE author IN (SELECT mapper_name FROM mappers WHERE mapper_id = '1')

但是这只会返回仅由userid执行的地图:1(在这种情况下是Nikola)和共同地图不会显示。

我的目标是:搜索ID:1返回地图#1和地图#2,搜索地图ID#2 - 返回地图#2

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

select 
from downloads d join
     mappers m
     on concat(' ', d.author, ' ') like concat('% ', m.mapper_name, ' %')
where m.id = 1

效率不高,但确实符合您的需求。

答案 1 :(得分:1)

根据我的评论,如果您无法规范化数据,可以使用此类内容

SELECT * 
FROM downloads 
INNER JOIN mappers
ON FIND_IN_SET(mappers.mapper_name, REPLACE(downloads.author, " ", ",")) > 0