postgresql – 在postgres中对jonined查询返回0计数

postgresql – 在postgres中对jonined查询返回0计数,第1张

概述我有以下数据库模式: 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 P 我有以下数据库模式:

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计数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1157912.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存