SQL子查询语法正确表路径无误却返回无结果如何排查
SQL子查询无返回结果排查方案
你可以按照以下步骤逐一排查问题:
- 先单独运行子查询验证是否有结果
执行以下代码查看子查询是否能返回数据:
如果子查询本身无返回,执行以下代码查看SELECT start_station_id FROM bigquery-public-data.new_york.citibike_trips WHERE usertype = 'subscriber' LIMIT 10usertype字段的实际枚举值,确认是否存在大小写或拼写差异(例如实际取值为Subscriber首字母大写):SELECT DISTINCT usertype FROM bigquery-public-data.new_york.citibike_trips - 检查关联字段类型是否匹配
确认citibike_stations表的station_id字段,和citibike_trips表的start_station_id字段数据类型是否一致,若一个为字符串类型一个为数值类型,隐式转换会导致匹配失败。可以通过显式类型转换验证:SELECT station_id, name FROM bigquery-public-data.new_york.citibike_stations WHERE SAFE_CAST(station_id AS STRING) IN ( SELECT SAFE_CAST(start_station_id AS STRING) FROM bigquery-public-data.new_york.citibike_trips WHERE usertype = 'subscriber' AND start_station_id IS NOT NULL ) - 排除子查询NULL值影响
如果子查询返回的start_station_id存在NULL值,IN操作符会因为NULL匹配逻辑返回未知,导致最终无结果,上面的示例代码已经增加了start_station_id IS NOT NULL条件排除空值影响。 - 验证字段值重叠
如果以上步骤都无问题,取一条子查询返回的start_station_id值,直接查询站点表是否存在对应记录,确认两个表的ID规则是否一致:SELECT * FROM bigquery-public-data.new_york.citibike_stations WHERE station_id = '测试ID值'
内容的提问来源于stack exchange,提问作者user17550653
相关产品推荐
相关产品推荐

