0

假设我有一张这样的桌子:

model_id | object_id | date_modified
1        | 123       | NULL
1        | 123       | 2012-12-11 16:55:21
1        | 456       | 2012-12-11 16:52:21
1        | 789       | NULL

我想返回没有修改的object_ids。这是我迄今为止尝试过的:

SELECT object_id from Table WHERE date_modified IS NULL

这将返回 123 和 789,我只想要 789。

SELECT DISTINCT object_id from Table WHERE date_modified IS NULL

这也返回 123 和 789,因为在 WHERE 过滤结果之后应用了 DISTINCT 子句。

有没有办法通过单个查询来实现这一点,或者我应该只返回一个不同的 object_ids 列表并以编程方式循环和过滤?

4

3 回答 3

2
SELECT object_id from Table GROUP BY object_id HAVING MAX(date_modified) IS NULL
于 2012-12-12T01:58:29.540 回答
0

询问:

SQLFIDDLE示例

SELECT DISTINCT t.object_id 
from Table1 t
WHERE t.object_id NOT IN (SELECT t1.object_id 
                          FROM Table1 t1
                          WHERE t1.date_modified IS NOT NULL)

结果:

| OBJECT_ID |
-------------
|       789 |
于 2012-12-12T17:54:23.287 回答
0

嵌套查询会有所帮助。内部查询选择所有已修改的object_id,然后外部查询选择所有日期为空但object_id 不在修改列表中的记录。

SELECT object_id FROM table
  WHERE date_modified IS NULL AND object_id NOT IN (
    SELECT object_id FROM table
      WHERE date_modified IS NOT NULL
  )
于 2012-12-12T01:52:21.670 回答