2

クエリがあります:

 SELECT 
   MAX(date), 
   logId,
   computerId
 FROM 
   logTable
 WHERE logId IN ('1','2','3')

しかし、IN句でcomputerIdも次のようにテストしたい:

logId = '1'およびcomputerId = '998874',

logId = '2'およびcomputerId = '334211', ...

これを行う方法 ?

4

4 に答える 4

2

INステートメントを複数のORステートメントに置き換える必要があります

 SELECT  MAX(date)
        ,  logId
        , computerId
 FROM   logTable
 WHERE  (logId = '1' AND computerid = '998874')
        OR (logId = '2' AND computerid = '334211')

または、多くの条件がある場合は、それらのメモリ内テーブルを作成し、これらの条件で結合する方が読みやすい場合があります

;WITH Conditions (logID, computerid) AS (
  SELECT '1', '998874'
  UNION ALL SELECT '2', '334211'
)
SELECT  MAX(date)
        ,  logId
        , computerId
FROM   logTable lt
       INNER JOIN Conditions c ON c.logID = lt.LogID 
                                  AND c.computerid = lt.computerID
于 2011-12-05T14:35:33.510 に答える
1

IN句でそれを行うことはできないと思います。条件付きの場所が必要だと思います。そう:

SELECT MAX(date), logId, computerId
FROM logTable
WHERE (logId = 1 AND computerId = '998874') OR
      (logId = 2 AND computerId = '334211') OR
      ...
于 2011-12-05T14:33:50.703 に答える
1

INSQL Server の はタプルをサポートしていません。EXISTSおよびテーブル式を使用できます。2008 年の構文を以下に示します。

SELECT MAX(l.date),
       l.logId,
       l.computerId
FROM   logTable l
WHERE  EXISTS(SELECT *
              FROM   (VALUES ( '1', '998874'),
                              ('2', '334211')) v(logId, computerId)
              WHERE  v.computerId = l.computerId
                     AND v.logId = l.logId)  
GROUP  BY l.logId,
          l.computerId  
于 2011-12-05T14:33:58.973 に答える
0

このような:

SELECT 
   MAX(date), 
   logId,
   computerId
 FROM 
   logTable
 WHERE (logId = '1' AND computerId = '998874')
    OR (logId = '2' AND computerId = '334211')
    OR (logId = '3' AND computerId = '123456')
 GROUP BY logId, computerId
于 2011-12-05T14:34:11.103 に答える