2017-01-27 36 views
0

我們有像獲取與上相同的列不同的數據

Fieldid userid data 
41  2  1 
12  2  0 
41  3  1 
12  3  1 

表結構我們希望其具有(數據= 1和filedid = 41)和(數據= 0和filedid = 12)的用戶

我們試圖查詢

select userid from table 
where (data=1 and filedid = 41) 
AND (data = 0 and filedid=12) 

但它返回空的結果。 任何人都可以幫助我們如何獲得使用MySQL的記錄?

+4

應將2個條件之間使用'或''..(數據= 1和filedid = 41)OR(數據= 0和filedid = 12)' –

+0

但它返回,如果任何一個條件爲真。 –

+0

但是提交的ID是不同的。 –

回答

1

可以使用HAVING條款與條件分組:

SELECT userid 
FROM mytable 
GROUP BY userid 
HAVING COUNT(CASE WHEN data = 1 AND FieldId = 1 THEN 1 END) >= 1 AND 
     COUNT(CASE WHEN data = 0 AND FieldId = 12 THEN 1 END) >= 1 
+1

爲什麼?爲什麼使用'HAVING'當你用簡單的'OR' /'AND'實現同樣的事情? –

+0

@Elon Nope。這是正確的答案。 – GurV

+0

@ElonThan我認爲OP想要返回*只是*'userid = 2'。在這種情況下,您必須使用像我的查詢之一的條件聚合來測試* group *是否滿足* both *條件。 –

-1

當使用一組或另一組數據搜索結果時,您必須使用OR關鍵字,而不是AND

SELECT userid FROM table 
WHERE (data = 1 AND filedid = 41) 
OR (data = 0 AND filedid = 12) 
+0

OP對符合BOTH標準的用戶標識感興趣。 – Strawberry

+1

@Strawberry他試圖使用這樣的查詢來獲取數據,所以我很確定這是正確的答案。只要看看他的示例查詢。他在那裏使用哪些數據? –

0

到@Giorgos類似,與列的比較簡潔:

select userid 
from t 
group by userid 
having sum((data,fieldId) = (1, 41)) > 0 
    and sum((data,fieldId) = (0, 12)) > 0 
0

你需要使用union all如:

select * from table1 where Fieldid = 41 and data = 1 union all 
select * from table1 where Fieldid = 12 and data = 0 

附加的圖像示出了輸出

enter image description here

+0

我不知道爲什麼這個答案得到了投票!任何人都可以向我解釋? – Saif

相關問題