postgresql where子句行为
我提出了两个我认为应该有相同结果的问题:postgresql where子句行为,postgresql,Postgresql,我提出了两个我认为应该有相同结果的问题: 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')
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';
唯一的区别是一个在SELECT DISTINCT ON内有WHERE子句,另一个在该子句外,但在SELECT COUNT内。但结果却不一样。我不明白为什么WHERE子句的位置在这种情况下会有所不同。有人能解释一下吗?还是有更好的方法来表达这个问题?这里有一个很好的方法来看待这个问题:
SELECT DISTINCT ON (id) id, value
FROM (select 1 as id, 1 as value
union
select 1 as id, 2 as value) a;
SELECT DISTINCT ON (id) id, value
FROM (select 1 as id, 1 as value
union
select 1 as id, 2 as value) a
WHERE value = 2;
问题与独特的条件以及在哪里可以看到什么有关。这是设计的行为。即使是你原来格式不好的帖子也有
作为结果2,其中table2.value='1'第二个查询中的code>与您的描述不匹配:唯一的区别是其中一个在SELECT DISTINCT ON内有WHERE子句,另一个在该子句外,但在SELECT COUNT内。你能修正你的疑问吗?我不明白你为什么要我修正这些疑问。如果我知道他们出了什么问题,我就不会寻求帮助。你的第二个查询有一个WHERE
子句,但第一个没有。因此,它们会有不同的结果。如果你仔细观察,你会发现它们都有WHERE子句。我的问题是为什么WHERE的位置会有不同。@user1625423因为那个些查询根本不起作用<代码>选择不同的
引用表1
,表2
,但表1
和表2
不存在--表名为result1
。第二个查询以相同的方式被破坏。此外,table2
(在中,其中table2.value='1';
)不存在,应将其引用为result2
。