2012-08-29 183 views
2

人搜索,MySQL的 - 连接两个表,在第二

我有两个表:

表1:

UID NAME 
1  Name1 
2  Name2 
3  Name3 

表2:

UID PID PARAM 
1  1  10 
2  1  20 
3  2  10 
4  2  30 
5  2  40 
6  3  60 
7  3  20 
8  3  10 

我需要加入两个表格(t1.UID = t2.PID)并仅列出来自第一个表格的记录,这些记录具有(例如)BOTH PARAM = 10 AND PARAM = 20在第二个表格中。这样一来,在这个例子中,查询应该返回:

UID  NAME 
1  Name1 
3  Name3 

..because只有名1和NAME3有两个PARAM = 10和param = 20

我怎样才能做到这一点?我知道这可能非常简单,但我无法在这里找到答案,也无法在google中找到答案。

预先感谢您! 斯内德

回答

3
select a.name   
from table1 a 
inner join table2 b on (a.UID = b.PID) 
where b.param in (10, 20) 
group by a.name 
having count(*) = 2 

通过声明你的表table1 a,您可以通过将声明的名称表中从柱调用任何columnfrom此表a.name

+1

如果你想同时param = 10和param = 20 –

+0

然后改变'或'为'和'它不工作...检查编辑我刚才做 –

+1

现在它将是空的结果导致参数不能是在同一行中的10和20 :) –

1

这个查询应该工作:

SELECT t1.* 
FROM table1 t1 
    INNER JOIN (SELECT PID 
       FROM table2 
       WHERE PARAM IN(10, 20) 
       GROUP BY PID 
       HAVING COUNT(*) = 2 
       )t2 
       ON t1.UID = t2.PID; 
+0

谢谢,但您的解决方案也返回名称2,其中有PARAM = 10,但没有按” t有PARAM = 20 ..我需要有记录一起PARAM = 10和PARAM = 20 –

+0

第一个是不正确的,它将返回结果,如果只有10个,那满足'in(10,20 )'。检查我的查询,希望它会起作用! – SexyBeast

+0

雅对!它应该现在工作! – Omesh

0

您不必加入:

SELECT * FROM TABLE1 WHERE UID IN( SELECT UID从表2可以 其中,param IN(10,20) )

+0

谢谢,但你的解决方案还返回名称2,它有PARAM = 10,但没有PARAM = 20 ..我需要有一起记录PARAM = 10和PARAM = 20 –

+0

对不起,我理解你的问题的方式是想要10或20行。 – Maia

0

试试这个:

select uid,name from t1 where exists (select 1 from t2 where param = 10 and pid = t1.uid) and exists (select 1 from t2 where param = 20 and pid = t1.uid); 
1
select distinct t1.id 
from table1 t1 join table2 t2 on t1.uid = t2.pid and t2.param = 10 
       join table2 t3 on t1.uid = t3.pid and t3.param = 20 
+0

你的解决方案正在工作,但有没有更简单的方法来做到这一点?表2中我有许多许多参数,它们应该符合标准。如果用户检查20个参数,我将不得不进行20次连接......更不用说,我必须以相同的方式(在相同的查询中)连接更多具有表2匹配标准的表(但是,如果我成功与一张桌子) –