我有一个查询:
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
子句来做到这一点。我认为你需要一个条件 where 。所以:
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