通过选中多列来从SQL表中获取记录

时间:2013-03-01 09:34:41

标签: sql sql-server-2008

我的表结构如下

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

这是我的表名为Table,现在我希望通过查询获得ID只有ValStr =' h1'和ValInt = 1,表示只有ValStr为hi的ID,以及属于同一ID列的ValInt = 1。请帮忙。

这是我到现在所做的事情。

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

我的实际答案应该是

ID
 2

但是我从上面的查询中得到了这个

ID
1
2
3
4

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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

答案 2 :(得分: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