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

Posted

技术标签:

【中文标题】MySQL 根据记录是不是存在于另一个表中选择布尔值【英文标题】:MySQL select boolean based on whether record exists in another tableMySQL 根据记录是否存在于另一个表中选择布尔值 【发布时间】:2013-07-23 21:35:34 【问题描述】:

您好,我有一个用户可以选择的实体表,我还有另一个表,其中包含有关用户最喜欢的实体的信息。见:

Entity:

id | ...

SavedEntity

id | entity_id | user_id

我希望结果是这样的:

entity_id | ... | favourite

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

我已经研究过使用(或模拟!)FULL JOIN,但这似乎不必要地复杂,我无法让它正常工作,我查看了 CASE 关键字,但我还是没有运气用它。

我相信这种多对多表结构是相当标准的,所以我确信有一种标准方法可以获取所需信息,谁能帮我弄清楚我缺少什么?

注意我正在为我的查询使用 CodeIgniter 和活动记录的东西,但我可以解决 vanilla SQL。

【问题讨论】:

【参考方案1】:

我意识到我的实验做得还不够,这是一个最终的查询,它产生了我想要的结果。这是其他有类似问题的人的结果。

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

【讨论】:

【参考方案2】:

我的问题是如何更改获取所有实体的查询 并添加一个附加字段是实体是否为布尔值 是用户的最爱吗?

  SELECT
  .....
  IF( `field` = 'value', 'True', 'False' ) AS "favourite"
  .....
  JOIN
  ....

【讨论】:

感谢 Raj,但这还不够,我知道条件值,但我的问题是首先选择要检查的“字段”。请看我的回答,我终于明白了。

以上是关于MySQL 根据记录是不是存在于另一个表中选择布尔值的主要内容,如果未能解决你的问题,请参考以下文章

如何编写一个 MySQL 查询,该查询返回一个临时列,其中包含与该行相关的项目是不是存在于另一个表中的标志

Laravel - 从一个表中获取不存在于另一个表中的记录,并附加了 where 子句

SELECT EXISTS 检查行是不是存在于另一个表中

排除存在于另一个表中的记录

如果记录存在于另一个表中,则条件格式详细信息行

php 选择值(不存在于另一个表中)