我有一个问题:
SELECT exhibitor_participation+0 AS exhibitor_participation_value
FROM `exhibitor_registry`
WHERE ((exhibitor_participation_value & 1) = 1)
问题:
为什么会这样:?
Unknown column 'exhibitor_participation_value' in 'where clause'
因为我在SELECT子句中定义了exhibitor_participation_value
,所以它不应该成功吗?
答案 0 :(得分:3)
这可能取决于您的数据库,但通常没有。 select子句中定义的列别名在where子句中不可用。
答案 1 :(得分:1)
where
子句正在数据集的原始列上运行。
同一级别的select
子句在同一个操作上运行,并且可以选择为外层代码提供别名。但关键的是,别名“包装”当前级别并且在那里不可用 - 具体来说,你不能在where子句中使用别名。
你可以做过这样的事情:
SELECT *
FROM
(SELECT exhibitor_participation+0 AS exhibitor_participation_value
FROM `exhibitor_registry`)
WHERE ((exhibitor_participation_value & 1) = 1)
并且别名可以在where子句中使用,因为它现在是在该级别选择的列之一的名称。将选择向下推入内部视图可能限制数据库提出适当查询计划的能力(通常将取决于许多因素并在每个单独查询之间变化)。另一方面,如果where条件需要花费不可忽略的时间来计算,实际上可以通过在内部视图中计算一次来节省时间,而不是两次(同样,优化器可以在这里重用第一个值 - 它取决于)。
与所有与效果相关的问题一样,请查看您特定情况下实际需要的内容。
答案 2 :(得分:0)
不使用您为该列指定的别名,只需使用实际的列名称,或者在这种情况下:
SELECT exhibitor_participation+0 AS exhibitor_participation_value
FROM `exhibitor_registry`
WHERE ((exhibitor_participation +0 & 1) = 1)