mysql - 根据另一个表中记录的存在向 select 语句添加一列

标签 mysql sql

我正在编写一个 SQL 查询,我想向记录集中添加一个列,该列的值基于另一个表中存在的记录。我有一个左连接连接表,我假设我必须在我的 SQL 中做某种透视,但我不熟悉表透视。

我现有的 SQL 是

SELECT tabs.name,tabs.id AS tabid,tabs.sort,fields.id AS fieldid, fields.label
FROM tabs
INNER JOIN fields
  ON tabs.id = fields.tabid
LEFT JOIN fields_reports
  ON fields_reports.fieldid = fields.id
WHERE fields_reports.reportid = 57
GROUP BY fields.id
ORDER BY tabs.sort, fields.id

SQL 中发生的事情是它提取字段(这是语句的核心)和选项卡(本质上是类别)。 fields_reports 表将字段映射到我正在构建的报告。

我需要做的是在我的语句中添加一列:如果当前字段在 fields_reports 表中有一条记录,其中传入的报告编号 (57),则将列值分配为 1,否则为 0。

编辑:我有另一个查询问题。现在,查询仅拉取附加到一份报告的字段。除了使用案例之外,有没有一种方法可以执行子查询以从 fields_reports 表中进行选择,以便我可以提取所有字段,然后将列附加到报告中?

这是现在拉取记录的查询,但只拉取一个报告字段

SELECT tabs.name,tabs.id AS tabid,tabs.sort,fields.id AS fieldid, fields.label,
  CASE WHEN fields_reports.id IS null THEN 0 ELSE 1 END AS inReport
FROM fields
INNER JOIN tabs
  ON tabs.id = fields.tabid
LEFT JOIN fields_reports
  ON fields_reports.fieldid = fields.id
WHERE fields_reports.reportid = 57
GROUP BY fields.id
ORDER BY tabs.sort, fields.id

如果我应该为此提出一个新问题,请告诉我。

最佳答案

You can `SELECT ..., IF(field_reports.reportid=57),1,0), ... FROM ...`

编辑 需要删除 WHERE 子句中对 reportid 的测试,否则这作为解决方案毫无意义。 (为此感谢@Dave Long。)

关于mysql - 根据另一个表中记录的存在向 select 语句添加一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5221826/

相关文章:

mysql - 我的 MySQL 语法有什么问题?

php - 比较 mysql 表中的列值

SQL服务器: can't save/change table design

c# - 使用 C# 将多个值传递给 SQL 内联查询中的单个参数

python manage.py makemigrations 没有检测到任何变化?

c++ - 如何解决make mysql-connector-c++-1.1.7错误

mysql - 使用 Mysql Dump 备份 View

mysql - 创建可以从任何端点访问的新 Mysql 用户

sql - 在 Common Lisp 中使用的最佳 SQL 库是什么?

sql - 如何将日期与当前时间一起保存到数据库中?