MySQL 带别名的大小写切换

MySQL Case switching with aliasing

我正在尝试执行 SQL 语句,selects 来自模式中两个表的数据,并使用别名匹配某些值。但是,我在案例切换场景中遇到了一些困难,需要一些帮助。

表格中的示例数据

Tbl1

:EID(作为 PK)、站点、co、持续时间、时间戳、方向、已拨

数据:

Tbl2

:分机(作为主键),用户

数据:

查询:

SELECT log.EID, xtn.user, log.duration, log.direction, log.dialed,
    CASE WHEN log.direction = "E" THEN log.dialed = xtn.ext
         ELSE log.dialed = log.dialed END
from schema.tbl1 AS log, schema.tbl2 AS xtn
WHERE log.station = xtn.ext 

ORDER BY station asc;

预期结果:

实际结果:

问题解释:

SELECT 查询应该从两个表中获取数据,并且大小写切换 log.direction列检查它是否包含 "E",然后它应该 select 通过在 xtn.ext 中查找适当的值 列,并相应地显示 xtn.user 值。

执行时,它正确识别了车站并将该列替换为用户,但它在末尾的列中给出了逻辑值 1 或 0(这表明逻辑迭代正确),但不是实际需要的数据。

如果 log.direction 行值为 E,它应该查找用户名。 如果 log.direction 行值是其他任何内容,它应该显示 log.direction 的原始数据(直到添加未来实现)。物理 log.direction selection 应省略,但包含在该示例中以显示演示应如何基本运行。

您的 CASE 表达式无效,因为它正在赋值。 CASE 表达式(即 THENELSE 之后的谓词)必须是单数 values。在任何情况下,您似乎只是在尝试根据日志方向的值显示可能的两个值之一。

SELECT
    log.EID,
    xtn.user,
    log.duration,
    log.direction,
    log.dialed,
    CASE WHEN log.direction = "E"
         THEN xtn.ext
         ELSE log.dialed END
FROM schema.tbl1 AS log
INNER JOIN schema.tbl2 AS xtn
    ON log.station = xtn.ext 
ORDER BY station;

顺便说一下,您会注意到我重构了您的查询以在两个表之间使用显式连接。这是进行连接的现代方式。

作为旁注,您可能想知道 CASE 表达式的当前输出中的 0 和 1 值从何而来。我的猜测是,这些是您制作的 assignments/comparisons 的 return 值。