2013-04-22 72 views
0

首先,我知道downloads表未規範化。MySQL在哪裏通配符

我有這兩個表:

downloads 

map | author 
1 | Nikola 
2 | Nikola George 

mappers 

mapper_id | mapper_name 
1 | Nikola 
2 | George 

我要查找所有可能的下載行給定的用戶是通過他的身份證被發現。

我所做的是:

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

但是,這將返回我只有被用戶標識只是做了映射:1(在這種情況下尼古拉)和共地圖不會顯示。

我的目標是:搜索ID:1都映射1和映射2返回,搜索映射器ID#2 - 地圖#2返回

+0

我建議你在映射器與PK的下載表格 – jcho360 2013-04-22 15:58:32

+0

你可以做一個加入到創建FK FIND_IN_SET。通常,這用於逗號分隔的列表,但您可以替換逗號來使用它。儘管不太可能有效。 – Kickstart 2013-04-22 15:59:40

回答

1

而且我的評論,這樣的事情可以,如果你不能正常化您的數據使用

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

你可以試試這個:

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

這並不高效,但確實符合您的需求。