MySQL SQL 子查询?

Posted

技术标签:

【中文标题】MySQL SQL 子查询?【英文标题】:MySQL SQL Subquery? 【发布时间】:2010-11-27 05:29:02 【问题描述】:

鉴于以下架构/数据/输出,我将如何格式化 SQL 查询以提供结果输出?

创建表报告( id BIGINT AUTO_INCREMENT, 名称 VARCHAR(255) 非空唯一, 源 VARCHAR(255) NOT NULL UNIQUE, 主键(id) ) 引擎 = 创新;

创建表字段( id BIGINT AUTO_INCREMENT, 名称 VARCHAR(255) 非空唯一, report_id BIGINT, 主键(id) ) 引擎 = 创新;

ALTER TABLE 归档添加外键 (report_id) REFERENCES report(id) ON DELETE CASCADE;

报告: ID、名称、来源 1 报告1 来源1 2 报告2 来源2 3 报告3 来源3 4 报告4 来源4

字段: id、名称、report_id 1 名 3 2 姓 3 3 岁 3 4 状态 4 5 岁 4 6级4

搜索词“年龄等级”的预期输出 report_id、report_name、num_fields_matched 3 报告3 1 4 报告4 2

提前致谢!

【问题讨论】:

顺便说一句,当“name”列是 UNIQUE 时,如何在表“Field”中放置两个“Age”值? 那是我的错误。我领先了自己。在测试您的代码后,我必须编辑架构以删除几个独特的语句。再次感谢。 【参考方案1】:

此查询将返回包含您需要的单词的所有报告。

SELECT *
FROM report r
INNER JOIN field f ON r.id = f.report_id
WHERE name IN ('age','rank')

你必须嵌套它。所以最终的查询是:

SELECT a.id, a.name, COUNT(*) 
FROM 
(
    SELECT r.id, r.name
    FROM report r
    INNER JOIN field f ON r.id = f.report_id
    WHERE f.name
    IN ('age', 'rank')
)a
GROUP BY a.id, a.name

【讨论】:

以上是关于MySQL SQL 子查询?的主要内容,如果未能解决你的问题,请参考以下文章

mysql 数据操作 子查询 介绍

MYSQL子查询

MySQL的SQL语句 - 数据操作语句(13)- 子查询

mysql--浅谈子查询1

SQL递归查询所有子节点

Mysql常用sql语句(20)- 子查询重点知识