SELECT version_stamp,
pscdesc_id,
psc,
pscdesctext
FROM pscdesc_history
WHERE ( psc IN (SELECT psc
FROM pso_history AS c
WHERE ( c.project = 121
OR c.project IS NULL )
AND EXISTS (SELECT * FROM pso_history AS x
WHERE x.project = 121
AND x.pso_id = c.pso_id ))
OR psc IS NULL )
AND EXISTS (SELECT * FROM pscdesc_history AS xyy
WHERE xyy.psc IN (SELECT psc
FROM pso_history AS c
WHERE ( c.project = 121
OR c.project IS NULL )
AND EXISTS (SELECT * FROM pso_history AS x
WHERE x.project = 121
AND
x.pso_id = c.pso_id))
AND xyy.pscdesc_id = pscdesc_history.pscdesc_id )
也许在 prosa 我正在尝试做的事情:
表中的条目pscdesc_history
表示更改。每个条目都是一个变化。
所以记录pscdesc_id
可以改变,说pscdesctext
被改变了。这给了我们一个新的条目,pscdesc_id
但有一个新条目version_stamp
,pscdesctext
其余的可以是空的。这些条目(至关重要,因为我只想处理一个项目)属于哪个项目,我不知道。我得看看表pso_history
。psc
是第三个表的外键。
我为什么不加入?由于这是一个充满更改记录的表,因此实际的外键psc
可能为空。这同样适用于pso_history
forgein 键project
也可能为 null 的情况。
所以我必须获取所有与 121pscdesc_history
的记录相关的记录或pso_history
与pso_history.project
121的记录相关的所有记录pso_history.project
。
有什么你可以看到你认为我可以加快速度的地方吗?AND EXISTS
用别的东西代替?
尽可能在任何地方使用 DISTINCT,我不明白为什么不加入而不是关联
整个查询将是
我认为这必须工作两倍,还要检查索引。