2012-08-23 67 views
1

可能重复:
MySQL LIKE IN()?选择LIKE值IN子查询

我有2个表

atm_name_initials(初始)

KS 
FW 
GE 
SD 

atm_tasks_dit(TASK_NAME,task_given_to)

task1 KS 
task2 GE 
task3 GE/SD 

现在我想SELECTatm_name_initialsWHERE所有不同的名字,他们都建立IN LIKE atm_tasks_dit.task_given_to

这是我到目前为止有:

SELECT initial FROM atm_name_initials 
WHERE initial 
IN 
(
    SELECT DISTINCT task_given_to FROM atm_tasks_dit 
    WHERE on_big_project_id = 29 
) 

如果EXECLY的atm_name_initials.initial值创建于,它会搜索哪些代码3210

我想是这样

SELECT initial FROM atm_name_initials 
WHERE initial 
"IS LIKE" IN 

'% 
(
    SELECT DISTINCT task_given_to FROM atm_tasks_dit 
    WHERE on_big_project_id = 29 
) 
%' 

或东西...

任何帮助,将不胜感激,谢谢!

+0

atm_name_initials没有重复,但在atm_tasks_dit可能是 – Empeus

回答

2

提出答案之间的混合,使用MySQL sintax:

SELECT DISTINCT initial 
    FROM atm_tasks_dit,atm_name_initials 
WHERE task_given_to LIKE CONCAT('%',initial,'%') 

万一检查SQL Fiddle code

这里是另一个similar question

+0

嘿,谢谢你的作品!但在那个例子中,我看到一个INNER JOIN,这是什么类型的选择? SELECT FROM table1,table2 ...就像一个联合,加入??它是什么? – Empeus

+0

不客气。这相当于一个'INNER JOIN'。检查此[问题/答案](http://stackoverflow.com/questions/10694527/sql-join-notation-is-this-equivalent-to-inner-or-full-join)了解更多详情。 – Yaroslav

+0

好的,这是一个内部连接,好吗?所以这翻译为http://www.sqlfiddle.com/#!2/9eec3/22?因为它更具可读性和逻辑性 – Empeus

0

试试这个:

SELECT initial 
FROM atm_name_initials 
join atm_tasks_dit 
on  initial like concat('%',task_given_to,'%') 
WHERE on_big_project_id = 29 
+0

好吧,但这是MySQL,我必须找到一个方法来连接这个? – Empeus

+0

的想法是,我必须找到在该项目中工作过的所有人,而不是只是冲刷所有名称首字母 – Empeus

0

尝试

Select distinct ani.initial--atd.task_name,atd.task_given_to 
From atm_tasks_dit atd 
join atm_name_initials ani on atd.task_given_to like '%' + ani.initial + '%' 
-- WHERE on_big_project_id = 29 

结果

初始

GE 
KS 
SD 

我在SQL服务器照我没有安装MySQL

+0

感谢您的答案,但我使用mysql – Empeus