2013-03-01 55 views
0

我有表結構如下獲取記錄從SQL表通過檢查多列

ID DefID AttrID ValInt  ValReal ValDate ValStr 
1  1   1  NULL  NULL  NULL  hi 
2  1   1  NULL  NULL  NULL  hi 
3  1   1  NULL  NULL  NULL  hi 
4  1   1  NULL  NULL  NULL  hi 
1  1   1   0  NULL  NULL  NULL 
2  1   1   1  NULL  NULL  NULL 
3  1   1   0  NULL  NULL  NULL 
4  1   1   0  NULL  NULL  NULL 

這是我的表命名錶,現在我想查詢只具有ValStr =「H1」,以獲得ID和ValInt = 1,僅表示屬於同一ID列的ValStr爲hi且ValInt = 1的ID。請幫忙。

在這裏,我已經做到現在。

select ID from Table where DefID=1 and ValStr='hi' and ValInt=1 

我實際的答案應該是

ID 
2 

,但我從上面的查詢得到這個

ID 
1 
2 
3 
4 
+0

什麼問題? – 2013-03-01 09:37:15

+0

你能解釋爲什麼'2'是你想要的結果嗎? – 2013-03-01 09:38:10

+0

你想要的結果是NULL是不是? – Sergio 2013-03-01 09:39:34

回答

1

還有一個選項

select t1.ID from Table t1 
where EXISTS (
       SELECT * 
       FROM Table t2 
       WHERE t2.DefID = 1 AND t2.ValStr = 'hi' 
      ) and t1.ValInt = 1 
+0

這是更正確的,我只想得到DefID爲1的結果。那就是權利。謝謝。 – 2013-03-01 10:02:42

+0

不錯的選擇;)thx – 2013-03-01 10:18:35

0

如何

SELECT distinct t1.ID 
FROM Table t1 
JOIN Table t2 on t1.id = t2.id 
WHERE t1.DefID=1 and t2.DefID = 1 
AND t1.ValStr='hi' and t2.ValInt=1 

或(根據口味)

SELECT distinct t1.ID 
FROM Table t1 
JOIN Table t2 on t1.id = t2.id AND t1.DefID=1 = t2.DefID 
WHERE t1.DefID=1 AND t1.ValStr='hi' and t2.ValInt=1 
+0

我認爲你必須刪除't1.DefID = 1和t2.DefID = 1 AND',因爲他似乎在他的查詢中錯誤地添加了它。 – araknoid 2013-03-01 09:41:00

+0

@flup,你查詢工作,通過替換真正的表名和列名。不公開我的表名和列名,我給出了錯誤的數據。感謝 – 2013-03-01 09:45:10

+0

SELECT DISTINCT t1.ID FROM LLAttrData T1 JOIN LLAttrData T2上t1.id = t2.id WHERE t1.DefID = t2.DefID AND t1.ValStr = 'HI' 和t2.ValInt = 1個 – 2013-03-01 09:47:46

1
SELECT ID 
FROM TableName 
WHERE (DefID = 1 AND ValInt = 1) OR 
     (DefID = 1 AND ValStr = 'hi') 
GROUP BY ID 
HAVING COUNT(*) = 2