MySQL根据记录是否存在于另一个表中来选择布尔值

Jos*_*osh 6 mysql codeigniter case subquery full-outer-join

嗨,我有一个用户可以选择的实体表,我还有另一个表,其中包含有关用户最喜欢的实体的信息.看到:

Entity:

id | ...
Run Code Online (Sandbox Code Playgroud)

SavedEntity:

id | entity_id | user_id
Run Code Online (Sandbox Code Playgroud)

我希望结果如下:

entity_id | ... | favourite
Run Code Online (Sandbox Code Playgroud)

我的问题是如何更改我的查询获取所有实体,并添加一个额外的字段是boolean实体是否是用户的最爱的值?

我已经看过使用(或模仿!)a FULL JOIN但这似乎不必要地复杂,我无法让它工作,我已经看了CASE关键字,但我再次没有运气.

这种多对多的表结构是相当标准的我相信所以我确信有一种获取所需信息的标准方法,任何人都可以帮我弄清楚我缺少的东西吗?

NB我正在使用CodeIgniter和我的查询的活动记录,但我可以解决vanilla SQL问题.

Jos*_*osh 7

我意识到我的实验并没有走得太远,这是一个最终的查询,它产生了我想要的结果.这是其他任何有类似问题的结果.

SELECT Entity.*,
          CASE WHEN UsersSavedEntity.user_id = '$user_id' 
               THEN 1 
               ELSE 0 
          END AS favourite
FROM Entity 
LEFT JOIN (SELECT * 
           FROM SavedEntity WHERE SavedEntity.user_id = '$user_id') 
           AS UsersSavedEntity 
          ON Entity.id = UsersSavedEntity.entity_id
Run Code Online (Sandbox Code Playgroud)