mysql - 将一个查询的结果传递给另一个查询,然后合并这两个查询的结果

标签 mysql sql

我有以下查询:

SELECT name as String
     , COUNT(*) Total
     , SUM(product = 1) Product
           FROM String
                WHERE language = 1
           GROUP 
                BY name
           ORDER
                BY total desc
           LIMIT 10

此查询的目的是根据字符串在 String 表中的出现次数报告 TOP-10 字符串,并报告它们在特定产品(id = 1)中的出现次数。

我想在结果中添加另一列,用于计算每个字符串在另一个字符串中间出现的次数。为此,我有一个由全文索引索引的表 Copy

我的问题是弄清楚如何将 String 列的值从结果传递到此查询:

SELECT COUNT(name) as inAll
    FROM Copy c
        WHERE MATCH(c.name) AGAINST (/*String*/)

是否可以只通过一个SQL查询就达到这样的结果?

Before:                   After:

String Total Product      String Total Product inAll
+-----+-----+------+      +-----+-----+-------+-----+
|blah | 52  |  12  |      |blah | 52  |  12   | 96  |
|bleh | 23  |  14  |      |bleh | 23  |  14   | 56  |
|bloh | 14  |  11  |      |bloh | 14  |  11   | 34  |
+-----+-----+------+      +-----+-----+-------+-----+

谢谢。

编辑

我的模式:

CREATE TABLE Language (
    `id` INT NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(30) NOT NULL,
    `code` VARCHAR(10) NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB CHARSET=utf8 COLLATE utf8_unicode_ci; 

CREATE TABLE Product (
    `id` INT NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(100) NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB CHARSET=utf8 COLLATE utf8_unicode_ci;

CREATE TABLE String (
    `id` INT NOT NULL AUTO_INCREMENT,
    `label` VARCHAR(200),
    `name` TEXT(500) NOT NULL,
    `language` INT NOT NULL,
    `product` INT NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_unicode_ci;

CREATE TABLE Copy (
    `id` INT NOT NULL,
    `name` TEXT(500) NOT NULL,
    PRIMARY KEY (`id`),
    FULLTEXT(name)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE utf8_unicode_ci;

加上 INSERTDELETEUPDATE 触发器。

最佳答案

您可以尝试连接StringCopy 表:

SELECT COUNT(*) AS inAll, t.String AS String, t.Total AS Total, t.Product AS Product
FROM Copy c
INNER JOIN
(
    SELECT name AS String, COUNT(*) Total, SUM(product = 1) Product
    FROM String
    WHERE language = 1
    GROUP BY name
    ORDER BY COUNT(*) desc
    LIMIT 10
) t
ON c.name = t.name

关于mysql - 将一个查询的结果传递给另一个查询,然后合并这两个查询的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31379972/

相关文章:

sql - FROM 中的子查询必须有别名 POSTGIS

php - PHP 中的日期格式

php - 在 JOIN 中使 ID 为负

mysql - 在父表中更新后更新子表中多行的父键的正确方法

mysql - 忽略类型转换 IN

c# - 在 C# 中连接到 SQL 数据库

sql - 右连接一个表到它自己 SQL

mysql - 使用sql查询更新acf字段值?

php - 无法使用 PHP 脚本更新 mysql 表

mysql - SQL - 获取不同的值及其在组中出现的频率计数