Postgresql使用CASE根据其他数据的存在返回不同的数据
我试图创建一个查询,根据数据库中某些数据的存在返回不同的值。 如果数据存在,我希望返回数据(x列),如果数据不存在,我返回一个“count”=0 我试过:Postgresql使用CASE根据其他数据的存在返回不同的数据,sql,postgresql,case,Sql,Postgresql,Case,我试图创建一个查询,根据数据库中某些数据的存在返回不同的值。 如果数据存在,我希望返回数据(x列),如果数据不存在,我返回一个“count”=0 我试过: WITH cart AS ( SELECT o.id AS order_id, o.ecom_id,COUNT(op.id) as count_product FROM order_products op JOIN orders o ON op.o
WITH cart AS (
SELECT o.id AS order_id, o.ecom_id,COUNT(op.id) as count_product
FROM order_products op
JOIN orders o ON op.order_id = o.id
JOIN order_status os ON os.id = o.status
WHERE dealer_id = 19 AND os.level = 0
GROUP BY o.id, o.ecom_id limit 1
),
cart_b AS(
SELECT EXISTS(SELECT * FROM cart) cart_full
)
SELECT CASE
WHEN cart_full is True THEN(SELECT order_id,ecom_id FROM cart)
ELSE (SELECT 0 AS count_product)
END
FROM cart_b
问题是:
ERROR: subquery must return only one column
LINE 15: WHEN cart_full is True THEN(SELECT dropix_order_id,ecom_id ...
我理解原因,但我不知道如何避免这种情况,并从购物车返回所有数据
没有plpgsql函数是否可能?这就是您想要的吗
with cart as (...)
select order_id, ecom_id, count_product from cart
union all
select x.*
from (values(null, null, 0)) as x(order_id, ecom_id, count_product)
where not exists (select 1 from cart)
查询在cte中运行。如果它返回一些东西,那么我们使用它作为结果;否则,我们将返回一条记录,前两列的值为固定值,
null
,计数为0
。要返回的内容:
IF cart_full is True THEN
SELECT order_id, ecom_id FROM cart
ELSE
SELECT 0 AS count_product
无法作为单个查询返回。为什么?因为有不同的列。我建议您返回所有三列。如果没有行,则其他列将为NULL
为此,您可以使用如下查询:
WITH cart AS (
SELECT o.id AS order_id, o.ecom_id, COUNT(op.id) as count_product
FROM order_products op JOIN
orders o
ON op.order_id = o.id JOIN
rder_status os ON os.id = o.status
WHERE dealer_id = 19 AND os.level = 0
GROUP BY o.id, o.ecom_id
LIMIT 1
)
SELECT o.id AS order_id, o.ecom_id, count_product
FROM cart
UNION ALL
SELECT NULL, NULL, 0
WHERE NOT EXISTS (SELECT 1 FROM cart)
我不太明白你的疑问。我有以下错误:错误:联合类型整数和文本无法匹配