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

如何查询左连接后新表中的NULL列?(DataLemur问题)

如何筛选左连接后liked_date为NULL的行?

我正在解决一道SQL题,执行左连接后得到了包含重复列的结果表,现在需要筛选出其中liked_date列为NULL的行,但不知道怎么正确引用连接后的结果。我的初始查询语句如下:

SELECT * 
FROM pages p
LEFT JOIN page_likes pl ON p.page_id = pl.page_id 

查询结果里有重复的page_id列,部分行的liked_date等字段为NULL。我考虑用CTE给连接结果表设置别名,但不确定这种方式是否正确,想知道怎么正确引用liked_date列并判断它是否为NULL?


方法1:直接在WHERE子句中过滤

不需要额外给连接结果设别名,直接通过表别名pl引用liked_date列即可,这样还能避免同名字段的混淆:

SELECT p.page_id, p.page_name
FROM pages p
LEFT JOIN page_likes pl ON p.page_id = pl.page_id 
WHERE pl.liked_date IS NULL;

别用SELECT *,因为会返回两个page_id列(分别来自pages和page_likes),明确指定需要的字段更清晰,也符合题目的输出需求。

方法2:用CTE包装连接结果

如果需要把连接逻辑封装起来,CTE是完全可行的方式,写法如下:

WITH joined_pages AS (
  SELECT p.page_id, p.page_name, pl.liked_date
  FROM pages p
  LEFT JOIN page_likes pl ON p.page_id = pl.page_id 
)
SELECT page_id, page_name
FROM joined_pages
WHERE liked_date IS NULL;

这种方式适合逻辑更复杂的场景,让代码结构更清晰。

关键说明

  • 左连接后,pl.liked_date IS NULL等价于该页面没有对应的点赞记录,正好匹配“无点赞页面”的查询需求。
  • 避免SELECT *是因为当表存在同名字段时,返回的重复列可能导致后续处理出错,明确指定字段是更规范的SQL写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 19:28:28