CREATE SCHEMA products;CREATE table products.product_group ( ID bigserial NOT NulL PRIMARY KEY,name varchar(255) NOT NulL)CREATE table products.product ( ID bigserial NOT NulL PRIMARY KEY,name varchar(255) NOT NulL,product_group_ID bigint REFERENCES products.product_group(ID),color varchar(255) NOT NulL)INSERT INTO products.product_group(name) values ('product group 1');INSERT INTO products.product(name,product_group_ID,color) VALUES ('product 1',1,'RED'); INSERT INTO products.product(name,'BLUE'); INSERT INTO products.product(name,'GREEN');
如果我执行以下查询:
SELECT count(*),pg.name FROM products.product pleft JOIN products.product_group pg ON (p.product_group_ID=pg.ID)WHERE pg.ID = 1AND p.color = 'RED'GROUP BY pg.name
我得到了结果:
1;"product group 1"
如果我执行以下查询:
SELECT count(*),pg.name FROM products.product pleft JOIN products.product_group pg ON (p.product_group_ID=pg.ID)WHERE pg.ID = 1AND p.color = 'YELLOW'GROUP BY pg.name
我没有得到任何结果,我想要:
0;"product group 1"
如何更改查询以获得我想要的结果?
解决方法SELECT count(p.name),pg.nameFROM products.product p right JOIN products.product_group pg ON p.product_group_ID=pg.ID and pg.ID = 1 and p.color = 'YELLOW'GROUP BY pg.name; count | name -------+----------------- 0 | product group 1
您的原始查询有两个问题.首先,外部连接是向后的.其次,where条件将外连接转换为内连接,因此必须将where条件移动到连接条件.
计数还有另一个问题.您必须在计数中声明一列,以便它只计算该列不为空的位置.
总结以上是内存溢出为你收集整理的postgresql – 在postgres中对jonined查询返回0计数全部内容,希望文章能够帮你解决postgresql – 在postgres中对jonined查询返回0计数所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)