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

求助:基于子查询多值结果过滤SQL表行的实现问题

问题排查与解决方案

你的SQL查询失效的核心原因是**IN是SQL的保留关键字**,但你将它用作了表名(Table IN)和列名(GENERAL.IN),直接引用会导致数据库解析时出现语法错误,无法正确执行查询。

修正方案

针对不同数据库,需要用特定符号包裹关键字类型的标识符,以下是主流数据库的写法:

1. MySQL/MariaDB 写法

使用反引号 ` 包裹关键字:

SELECT *
FROM GENERAL
WHERE `GENERAL`.`IN` IN (
    SELECT `IN`.`ID`
    FROM `IN`
    WHERE `IN`.`TYPE` = 1
)

2. SQL Server 写法

使用方括号 [] 包裹关键字:

SELECT *
FROM GENERAL
WHERE [GENERAL].[IN] IN (
    SELECT [IN].[ID]
    FROM [IN]
    WHERE [IN].[TYPE] = 1
)

3. Oracle 写法

使用双引号 "" 包裹关键字(注意Oracle对大小写敏感,若表/列创建时为大写,双引号内需保持大写):

SELECT *
FROM GENERAL
WHERE "GENERAL"."IN" IN (
    SELECT "IN"."ID"
    FROM "IN"
    WHERE "IN"."TYPE" = 1
)

优化写法(更易读)

给表添加别名,避免重复引用关键字,提升代码可读性:

-- 以MySQL为例,其他数据库只需替换包裹符号即可
SELECT g.*
FROM GENERAL g
WHERE g.`IN` IN (
    SELECT i.ID
    FROM `IN` i
    WHERE i.TYPE = 1
)

修改后执行查询,就能得到你期望的结果:

ID IN OUT
1  2  3
4  5  6
8  2  4
9  2  4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:05:26