如何从select()交叉引用表?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (56)

我有一个表格,其中包含我想从中选择所有内容的类别列表。我有另一个表包含特定用户选择的类别。

我想选择所有可用的当前类别,然后在查询结果中添加一个名为selected的新行,如果用户已经选择了该类别的话。

到目前为止,我已经尝试过

SELECT category.*
     , user_category.user_cat_id AS 'selected' 
  FROM category
  JOIN user_category
    ON category.cat_id = user_category.category
    WHERE user_category.user_id = 1

这似乎只显示了已选择的类别,而不是全部。

提问于
用户回答回答于
SELECT c.* ,
       (CASE WHEN uc.user_id IS NULL THEN 0 ELSE 1 END) as selected'
FROM category c LEFT JOIN
     user_category uc
     ON c.cat_id = uc.category AND uc.user_id = 1;
用户回答回答于

请尝试将查询更改为:

SELECT category.* , IFNULL(user_category.user_cat_id, 0) AS 'selected' 
FROM category 
LEFT JOIN user_category 
  ON category.cat_id = user_category.category 
WHERE user_category.user_id = 1 OR user_category.user_id IS NULL

所属标签

可能回答问题的人

  • EatRice

    16 粉丝0 提问143 回答
  • 成都加米谷大数据

    11 粉丝0 提问11 回答
  • 富有想象力的人

    5 粉丝0 提问344 回答
  • 最爱开车啦

    9 粉丝503 提问1.6K 回答

扫码关注云+社区

领取腾讯云代金券