Mysqli IN运算符结合静态值与动态查询的使用问题
解决你的SQL查询语法问题
嘿,我一眼就看出你这条SQL语句的问题啦!你想把静态ID 219 和子查询的结果结合起来用IN筛选,但写法不符合SQL的语法规则,所以才会运行失败。
问题出在哪?
你原来的语句里,把静态值'219'用引号括起来后直接跟子查询,写成了IN ('219', SELECT ...)——这种写法是错误的。IN子句的正确用法要么是括号内的逗号分隔值列表,要么是单个子查询,不能把两者混在一起这么写,数据库会把后面的SELECT语句当成字符串的一部分,自然解析出错。
给你两种正确的写法:
写法一:用OR拆分条件(最直观)
直接把“id等于219”和“id在子查询结果里”分成两个条件,用OR连接,逻辑清晰,容易维护:
SELECT * FROM `table1` WHERE `id` = '219' OR `id` IN (SELECT `id` FROM `table2` WHERE `parent_id`='219')
写法二:用UNION ALL合并静态值和子查询结果
把静态值219当成一个临时的结果集,和子查询的结果用UNION ALL合并,再放到IN子句里:
SELECT * FROM `table1` WHERE `id` IN ( SELECT '219' AS id UNION ALL SELECT `id` FROM `table2` WHERE `parent_id`='219' )
两种写法都能实现你想要的效果,选哪种看你的习惯就行~
内容的提问来源于stack exchange,提问作者GamesPlay
相关产品推荐
相关产品推荐

