【问题标题】:MySQL SQL Subquery?MySQL SQL 子查询?
【发布时间】: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”值?
  • 那是我的错误。我领先了自己。在测试您的代码后,我必须编辑架构以删除几个独特的语句。再次感谢。

标签: sql mysql


【解决方案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

【讨论】:

    猜你喜欢
    • 2018-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多