0

私は次のようなテーブル構造を持っています

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という名前のテーブルです。ここで、ValStr='h1'とValInt=1のみを持つクエリでIDを取得します。これは、ValStrがhiで、ValInt=1が同じID列に属するIDのみを意味します。助けてください。

これが私が今までやってきたことです。

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

私の実際の答えは

ID
 2

しかし、私は上記のクエリからこれを取得しています

ID
1
2
3
4
4

3 に答える 3

1
SELECT  ID
FROM    TableName
WHERE   (DefID = 1 AND ValInt = 1) OR
        (DefID = 1 AND ValStr = 'hi')
GROUP   BY ID
HAVING  COUNT(*) = 2
于 2013-03-01T09:47:38.413 に答える
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
于 2013-03-01T09:51:26.643 に答える
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
于 2013-03-01T09:39:04.267 に答える