0

首先,我知道该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

4

2 回答 2

1

你可以试试这个:

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

这效率不高,但确实满足您的需求。

于 2013-04-22T15:59:28.613 回答
1

根据我的评论,如果您无法标准化数据,则可以使用类似的方法

SELECT * 
FROM downloads 
INNER JOIN mappers
ON FIND_IN_SET(mappers.mapper_name, REPLACE(downloads.author, " ", ",")) > 0
于 2013-04-22T16:02:46.733 回答