クエリがあります:
SELECT
MAX(date),
logId,
computerId
FROM
logTable
WHERE logId IN ('1','2','3')
しかし、IN句でcomputerIdも次のようにテストしたい:
logId = '1'およびcomputerId = '998874',
logId = '2'およびcomputerId = '334211', ...
これを行う方法 ?
クエリがあります:
SELECT
MAX(date),
logId,
computerId
FROM
logTable
WHERE logId IN ('1','2','3')
しかし、IN句でcomputerIdも次のようにテストしたい:
logId = '1'およびcomputerId = '998874',
logId = '2'およびcomputerId = '334211', ...
これを行う方法 ?
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
IN
句でそれを行うことはできないと思います。条件付きの場所が必要だと思います。そう:
SELECT MAX(date), logId, computerId
FROM logTable
WHERE (logId = 1 AND computerId = '998874') OR
(logId = 2 AND computerId = '334211') OR
...
IN
SQL 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
このような:
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