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

如何从关联查询结果中选取前300行?SQL语句无结果排查

问题分析与修正

你的SQL语句存在几个关键问题,导致执行后无结果甚至语法异常:

1. 语法错误:多余的分号截断语句

主查询的WHERE子句中,Row_Num BETWEEN 1 AND 300;后面的分号会直接截断当前语句,使得后续的AND [User Category] = 'Subscriber';变成独立的无效语句——这个过滤条件根本没有被执行。

2. 分页逻辑倒置

你先对全表数据生成行号,再过滤符合条件的记录,这会导致:全表排序后的前300行可能完全不在你要筛选的Account ID IN (...)和User Category = 'Subscriber'范围内,自然查不到匹配结果。正确逻辑应该是先过滤符合条件的数据,再对过滤后的结果生成行号。

3. 潜在的数据类型不匹配

[Account ID]与No_Occupation表的[MSISDN]可能存在数据类型不一致的情况(比如一个是数值型,一个是字符型),导致IN关联无法匹配到数据。可以检查两者的字段类型,必要时添加类型转换。


修正后的SQL语句

WITH PagingCte AS (
    SELECT [Account ID],[User Name],[Last Name],[User Category],
        Row_Num = Row_Number() OVER (ORDER BY [User Name])
    FROM AllBalance_20230119
    -- 先过滤符合条件的数据,再生成行号
    WHERE [User Category] = 'Subscriber'
      AND [Account ID] IN (SELECT [MSISDN] FROM No_Occupation)
)
SELECT [Account ID],[User Name],[Last Name],Row_Num
FROM PagingCte
WHERE Row_Num BETWEEN 1 AND 300;

如果存在数据类型不匹配的情况,可以添加类型转换(示例为Account ID转字符串):

WITH PagingCte AS (
    SELECT [Account ID],[User Name],[Last Name],[User Category],
        Row_Num = Row_Number() OVER (ORDER BY [User Name])
    FROM AllBalance_20230119
    WHERE [User Category] = 'Subscriber'
      AND CAST([Account ID] AS VARCHAR(20)) IN (SELECT [MSISDN] FROM No_Occupation)
)
SELECT [Account ID],[User Name],[Last Name],Row_Num
FROM PagingCte
WHERE Row_Num BETWEEN 1 AND 300;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 15:25:27