2012-08-29 180 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匹配標準的表(但是,如果我成功與一張桌子) –