基于 OR 子句的 SQL 计算列

标签 sql postgresql

如果我有以下查询:

SELECT *
FROM Flights
WHERE Flights.From='Rome' OR Flights.To='London';

有什么方法可以添加像 matched 这样的计算列来标记匹配的字段吗?

| number | from     | to     | matched |
|--------|----------|--------|---------|
| 1      | Rome     | Munich | "from"  |
| 2      | New York | London | "to"    |
| 3      | Berlin   | London | "to"    |

最佳答案

SELECT *,
    CASE
       WHEN Flights.From='Rome' THEN 'From'
       WHEN Flights.To='London' THEN 'To'
     END as matched
FROM Flights
WHERE Flights.From='Rome' OR Flights.To='London'

您可以创建一个模拟 WHERE 语句逻辑的 CASE 语句。

SELECT *,
    CASE
       WHEN Flights.From IN ('Rome','London','etc.')
             AND Flights.To IN ('Rome','London','etc.') THEN Flights.From || ', ' || Flights.To
       WHEN Flights.From IN ('Rome','London','etc.') THEN Flights.From
       WHEN Flights.To IN ('Rome','London','etc.') THEN Flights.To
     END as MatchedValue
     ,CASE
       WHEN Flights.From IN ('Rome','London','etc.')
             AND Flights.To IN ('Rome','London','etc.') THEN 'Both'
       WHEN Flights.From IN ('Rome','London','etc.') THEN 'From'
       WHEN Flights.To IN ('Rome','London','etc.') THEN 'To'
     END as MatchedDirection
FROM Flights
WHERE Flights.From='Rome' OR Flights.To='London'

当使用 case 语句时,满足的第一个 WHEN 条件将是答案,因此如果您的两个条件都满足并且您希望看到第一个 WHEN 条件必须寻找这种可能性。

关于基于 OR 子句的 SQL 计算列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39006649/

相关文章:

sql - 将多行的列列为行(postgresQL)

sql - 查询显示与给定用户名匹配的相关用户名

sql - "INSERT"处或附近的 postgreSQL 语法错误

SQL 数据库设计 : How to get around storing a list?

为不是函数的对象 'Firm' 提供的 SQL 参数

MySQL + 基于状态的持续时间

postgresql - 如何在 psql 中获取多个函数?

javascript - 未解析时为 undefined json,解析时为 undefined token

php - 我如何在 php foreach 循环中将所选值列为所选值并将其他值列为列表

sql - Postgres : on conflict with implicit conflict target