在case语句中使用select语句中的参数[重复]

Posted

技术标签:

【中文标题】在case语句中使用select语句中的参数[重复]【英文标题】:Using parameters from select statement inside case statement [duplicate] 【发布时间】:2018-07-06 08:15:43 【问题描述】:

我有以下问题

SELECT product.*,
(SELECT bid FROM server1 WHERE product_id = product.id) AS bid1,
(SELECT bid FROM server2 WHERE product_id = product.id) AS bid2,
CASE
    WHEN bid1 > bid2 THEN '1 wins'
    WHEN bid2 > bid1 THEN '2 wins'
    ELSE 'undecided'
END AS bid_status
FROM product
WHERE id= $1

此查询在 CASE 语句中抛出错误,指出 bid1 列不存在。如何将子查询作为 case 语句的变量传入?

【问题讨论】:

【参考方案1】:

范围问题。首先将您的查询包装为派生表:

select dt.*
    CASE
        WHEN bid1 > bid2 THEN '1 wins'
        WHEN bid2 > bid1 THEN '2 wins'
        ELSE 'undecided'
    END AS bid_status
from
(
SELECT product.*,
    (SELECT bid FROM server1 WHERE product_id = product.id) AS bid1,
    (SELECT bid FROM server2 WHERE product_id = product.id) AS bid2,
FROM product
WHERE id= $1
) dt

【讨论】:

以上是关于在case语句中使用select语句中的参数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

select语句如何找重复的信息

Informix 是不是支持 SELECT 查询中的 CASE 语句

Case 语句中的 select 语句

Select 语句中的 Case 语句中的 Exists 函数需要 FOREVER

switch-case语句中的多个变量[重复]

sql中的case语句对齐和清理