我正在编写一个 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/