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 查询,该查询返回一个临时列,其中包含与该行相关的项目是不是存在于另一个表中的标志