PostgreSQL查询:添加基于Address表的判断列时语法错误,求正确实现
问题解决:添加条件判断列的正确SQL写法
你的原查询存在几个语法问题,修正后即可实现需求:
原语句的问题点
- 表名拼写错误:
"T Adress"应为"T Address" - 字符串连接符错误:
&不是标准SQL的字符串连接方式,会导致语法或逻辑错误 - 条件列语法错误:
IF...THEN...END IF是存储过程/脚本中的语法,不能直接用于SELECT查询的列生成
修正后的标准SQL语句(兼容大多数数据库)
SELECT DISTINCT "User", CASE WHEN EXISTS ( SELECT 1 FROM "Scheme"."T Address" WHERE "Range" = 'XXX' AND "Name1" LIKE CONCAT('%', "User", '%') ) THEN 'yes' ELSE 'NO' END AS "^Address" FROM "Scheme"."T User" ORDER BY "User" ASC;
关键修正说明
- 用CASE WHEN替代IF结构:这是SQL查询中生成条件计算列的标准写法,所有主流数据库都支持
- 修正表名拼写:确保关联的Address表名称正确
- 使用CONCAT函数拼接模糊查询字符串:避免不同数据库(如MySQL/SQL Server/Oracle)的连接符差异,
CONCAT('%', "User", '%')会自动生成包含用户名称的模糊匹配规则 - EXISTS子查询优化:子查询中只需
SELECT 1即可判断存在性,无需查询具体字段,性能更优
针对MySQL的简化写法(可选)
如果使用MySQL数据库,可以用更简洁的IF函数:
SELECT DISTINCT "User", IF( EXISTS ( SELECT 1 FROM "Scheme"."T Address" WHERE "Range" = 'XXX' AND "Name1" LIKE CONCAT('%', "User", '%') ), 'yes', 'NO' ) AS "^Address" FROM "Scheme"."T User" ORDER BY "User" ASC;
内容的提问来源于stack exchange,提问作者StOMicha
相关产品推荐
相关产品推荐

