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

如何在SQL查询中新增字段标识工作表是教师自制还是已点赞

解决方法:添加来源类型区分字段

我来帮你调整这个SQL语句,不仅能返回目标工作表,还能清晰标注每个表的来源类型,同时优化一下原语句的性能:

通用方案(适配大多数数据库,如MySQL、PostgreSQL、SQL Server等)

使用CASE WHEN语句可以灵活处理各种情况,包括教师给自己的工作表点赞的重叠场景:

SELECT 
    w.title,
    w.worksheet_id,
    CASE
        -- 优先判断既是自制又是点赞的情况
        WHEN w.teacher_id = 5 AND EXISTS (SELECT 1 FROM likes l WHERE l.worksheet_id = w.worksheet_id AND l.teacher_id = 5) 
            THEN '自制且点赞的工作表'
        -- 仅自制的情况
        WHEN w.teacher_id = 5 
            THEN '自制工作表'
        -- 仅点赞的情况
        WHEN EXISTS (SELECT 1 FROM likes l WHERE l.worksheet_id = w.worksheet_id AND l.teacher_id = 5) 
            THEN '点赞的工作表'
    END AS source_type
FROM worksheets w
WHERE 
    -- 筛选条件简化为两种情况:自制 或 点赞
    w.teacher_id = 5 
    OR EXISTS (SELECT 1 FROM likes l WHERE l.worksheet_id = w.worksheet_id AND l.teacher_id = 5);

MySQL专属简化方案

如果你用的是MySQL,也可以用IF函数快速实现(如果不需要区分重叠场景的话):

SELECT 
    w.title,
    w.worksheet_id,
    -- 直接判断是否为自制,否则就是点赞的
    IF(w.teacher_id = 5, '自制工作表', '点赞的工作表') AS source_type
FROM worksheets w
WHERE 
    w.teacher_id = 5 
    OR EXISTS (SELECT 1 FROM likes l WHERE l.worksheet_id = w.worksheet_id AND l.teacher_id = 5);

为什么原方案里的IF没生效?

大概率是因为你没处理好重叠场景(教师给自己的表点赞),或者没有用关联条件正确判断点赞关系。上面的写法用EXISTS替代了原语句的IN,不仅性能更优,还能更精准地关联工作表和点赞记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:00:51