You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL中WHERE子句仅使用布尔列名的工作原理咨询

问题描述

我写了下面这段SQL,执行后能得到正确结果,但搞不懂WHERE子句里直接写列名的运行逻辑,麻烦解释下原理或者相关知识点:

with preparation as(
select a,
       b,
       c,
       regexp_like(a, 'example1|example2') as example
from database_X
)

select *
from preparation
where example
原理拆解
  • 先看CTE里的regexp_like(a, 'example1|example2') as example:这个正则匹配函数返回的是布尔值(要么TRUE要么FALSE),所以example是个布尔类型的列。
  • WHERE子句里直接写example,就是一种简写写法,和写WHERE example = TRUE完全等价。数据库会自动检查每行的example值:是TRUE就留下该行,FALSE就过滤掉。
  • 这种写法在支持布尔类型的SQL里(比如PostgreSQL、Oracle 12及以上版本)都能用,属于简化代码的语法糖。
特殊情况说明

有些SQL方言(比如MySQL)没有原生布尔类型,会用TINYINT(1)来模拟布尔值。这时候WHERE example等价于WHERE example <> 0——非0值会被当成真,0则是假。

内容的提问来源于stack exchange,提问作者user16462786

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 05:10:35