我有一个attach
包含大量数据集的表,它是一个临时表,由 sql 创建:
id number name
1 X1 name1
2 X2 name2
3 X3 name3
4 X4 name4
桌子attachment_map
id item attach_id file_id versionid
1 X1 1 100 0
2 X2 0 0 1
桌子version
id attach_id
1 2
我想查询以获得:
id number name item
1 X1 name1 X1
2 X2 name2 X2
3 X3 name3
4 X4 name4
如您所见,返回行添加了实际从 table 获得的新列attachment_map
,有三个不可能:
1)。attach
没有项目。
2).有项目,通过连接到attach_id
列attachment_map
。
2).有项目,通过连接到attach_id
列version
。
我写了一个查询,但性能很差,执行速度很慢,似乎是因为联合。每个人都可以告诉另一种方式或我如何改进它吗?谢谢
WITH tb AS
(SELECT t.*,
i.item
FROM attach t,
attachment_map am,
version v
WHERE (am.attach_id = t.attachid
OR (am.file_id = 0
AND am.version_id = v.id))
)
SELECT * FROM tb
UNION
SELECT tb.*, NULL FROM tb, attach WHERE tp.id NOT IN (attach.id);