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

如何关联discussions与votes表 查询时填充likeByMe布尔值

实现方案

有两种常用的高效写法可以实现需求,你可以根据自己使用的数据库和实际业务场景选择:

方案1:EXISTS子查询(更推荐,性能更优,无需处理关联重复问题)

大部分主流数据库(MySQL、PostgreSQL、SQLite等)都支持直接将EXISTS的结果作为布尔值返回,写法最简洁:

SELECT 
    d.*,
    EXISTS (
        SELECT 1 FROM votes v 
        WHERE v.parentId = d.id 
        AND v.userId = @current_user_id
        -- 如果votes表有点赞/点踩等类型区分,这里可以加额外条件:AND v.type = 'like'
    ) AS likeByMe
FROM discussions d

你只需要把@current_user_id替换为实际查询的指定用户ID即可。

方案2:LEFT JOIN关联查询

如果需要同时拉取votes表的其他关联字段可以用这种写法,注意用户过滤条件要写在JOIN的ON子句中,不能写在WHERE里,否则会过滤掉没有被当前用户点赞的讨论记录:

SELECT 
    d.*,
    CASE WHEN v.id IS NOT NULL THEN TRUE ELSE FALSE END AS likeByMe
    -- 如果是MySQL也可以简化写:IF(v.id IS NOT NULL, TRUE, FALSE) AS likeByMe
FROM discussions d
LEFT JOIN votes v 
    ON v.parentId = d.id 
    AND v.userId = @current_user_id
    -- 同样可加类型过滤条件:AND v.type = 'like'

内容的提问来源于stack exchange,提问作者mohammad reza shabani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 23:33:02