2015-04-23 48 views
1

我需要從一個表中選擇其中兩個id都存在於另一列中具有匹配id的列中。 我的查詢如下所示,即使只有一個匹配的id也能給出行。從兩個ID都存在的表中選擇

select * from customer_appdata where appdata_id in(11,12) 

id customer_id appdata_id 
6 65    4 
7 65    12 
8 65    8 
9 66    11 
10 66    12 

所以在這裏我只是想最後和倒數第二行(9,10),因爲它們同時具有11和12與普通ID 66

+0

11,12與9,10或66有什麼關係?困惑。請澄清你的問題。不清楚。請指定db平臺。 – OldProgrammer

+0

你可以擁有多個具有相同'customer_id'和相同'appdata_id'的記錄嗎? –

+0

'select * from customer_appdata where(11,12)and customer_id = 66'中的appdata_id否?你的問題真的不清楚。 – plalx

回答

0

該查詢選擇customer_appdata爲12或11的行,並使用exists來查看其他行是否也在表中。

select * from customer_appdata c1 
where appdata_id in (11,12) 
and exists (
    select 1 from customer_appdata c2 
    where c2.appdata_id in (11,12) 
    and c2.appdata_id <> c1.appdata_id 
    and c2.customer_id = c1.customer_id 
) 
+0

按預期工作,非常有幫助! – hotplugin

2

如果我理解正確的問題,這應該工作:

select * from customer_appdata where customer_id in (
    select customer_id from customer_appdata 
    where appdata_id in (11,12) 
    group by customer_id 
    having count(distinct appdata_id) = 2 
) 

您會找到重複特定次數(即內部查詢)的所有customer_id,然後選擇具有這些customer_id的所有行。有可能是一種更快的方式,但如果性能不重要,這是解決問題的簡單方法。

+0

我編輯了答案,因爲我剛纔意識到你想解決的真正問題。第一個版本會做一些與你預期不同的事情。 –

+0

您需要更改具有count(appdata_id)= 2的計數(appdata_id)> 2. appdata_id可以大於2 –

+1

獨特的appdata_id不能超過兩個,因爲我只在兩個值上過濾它們。這是需要確保我已經匹配組中的11和12。 –