所以我有一个表,每条记录都是对一个对象的更改。
例如在应用程序中
您在该项目中使用项目 ID 打开您的项目 您编辑对象名称点击保存
生成带有日期时间戳和对象名称更改值的新记录,与您处理的项目 ID 相关
棘手的部分是,project_id 可以为空。object_id 仍然是唯一的。所以我从对象 ID 知道我在哪个项目上。
change
以 object_id 和 datetime 作为复合主键的表。
例如
object_id | datetime | objectname | project_id
55 | 2014-03-24 09:55:40 | somevalue 1 | 10
77 | 2014-02-24 09:55:40 | somevalue | 88
55 | 2014-10-24 09:55:40 | somevalue2 | null
55 | 2014-11-24 09:55:40 | somevalue3 | 10
22 | 2014-12-24 09:55:40 | somevaluex | 10
我想要得到的是属于项目 10 的所有记录
那将是
object_id | datetime | objectname | project_id
55 | 2014-03-24 09:55:40 | somevalue 1 | 10
55 | 2014-10-24 09:55:40 | somevalue2 | null
55 | 2014-11-24 09:55:40 | somevalue3 | 10
22 | 2014-12-24 09:55:40 | somevaluex | 10
我尝试但失败的是同一张表上的内部连接
我试过这个:
SELECT * FROM change
LEFT JOIN (SELECT * from change AS x WHERE x.project IS NULL) AS change2
ON change2.object_id = change.object_id
WHERE change.project = 10
这只为我提供项目 ID 具有空元素的记录,例如 INNER JOIN。我也试过:
SELECT * FROM change
LEFT JOIN change AS change2
ON change2.object_id = change.object_id
AND change2.project is NULL
WHERE change.project = 10
有趣的是,它给出了相同的结果(就像内部连接一样,例如,只有项目为 null 的记录)
我错过了什么?
我认为你需要一个
UNION
或一个OR
withEXISTS
: