【发布时间】:2012-11-26 06:49:19
【问题描述】:
我做了两个我认为应该有相同结果的查询:
SELECT COUNT(*) FROM (
SELECT DISTINCT ON (id1) id1, value
FROM (
SELECT table1.id1, table2.value
FROM table1
JOIN table2 ON table1.id1=table2.id
WHERE table2.value = '1')
AS result1 ORDER BY id1)
AS result2;
SELECT COUNT(*) FROM (
SELECT DISTINCT ON (id1) id1, value
FROM (
SELECT table1.id1, table2.value
FROM table1
JOIN table2 ON table1.id1=table2.id
)
AS result1 ORDER BY id1)
AS result2
WHERE value = '1';
唯一的区别是一个 WHERE 子句在 SELECT DISTINCT ON 内,另一个在 SELECT DISTINCT ON 之外,但在 SELECT COUNT 内。但结果并不相同。我不明白为什么 WHERE 子句的位置在这种情况下会有所不同。谁能解释一下?或者有没有更好的方式来表达这个问题?
【问题讨论】:
-
即使你原来的格式错误的帖子在第二个查询中也有
AS result2 WHERE table2.value = '1';,这与你的描述不匹配:唯一的区别是一个在 SELECT DISTINCT ON 内有 WHERE 子句,另一个在外面那个,但是在 SELECT COUNT 里面。你能解决你的问题吗? -
我不明白您为什么要我修复查询。如果我知道他们出了什么问题,我就不会寻求帮助了。
-
您的第二个查询有一个
WHERE子句,但第一个没有。因此,它们会产生不同的结果。 -
如果您仔细观察,您会发现它们都有 WHERE 子句。我的问题是为什么 WHERE 的位置会有所不同。
-
@user1625423 因为这些查询不起作用。
select distinct指的是table1、table2,但table1和table2不存在——表名为result1。第二个查询以同样的方式被破坏。此外,table2(在WHERE table2.value = '1';中)不存在,应引用为result2。
标签: postgresql