查询查询 - 第一次

时间:2013-07-05 02:20:09

标签: mysql sql nested-queries

我正在使用从我的PHP / SQL驱动的CMS网站下载的教科书和数据库来学习SQL(因为,就像有人建议的那样,我了解各种查询结果应该是什么样子)。

我更熟悉MS Access,我会在其中创建查询,保存查询,然后针对它们运行查询。这使我能够将更大的数据分析任务分解为更小,更容易理解的部分。

无论如何,SQL会话的目标是找到我的电子邮件数据库中收到最多电子邮件的十个人。以下查询提供了发送到电子邮件地址的电子邮件的每个实例:

SELECT alert.alert_recipient,alert_sent.id
FROM alert
INNER JOIN alert_sent
ON alert_sent.alert_id=alert.id

现在,我想查询上面的查询。如果上面的查询结果是一个表,我会想要一些东西(我是一个新的,语法可能是错误的):

SELECT COUNT(DISTINCT alert_recipient, ID) FROM myqueryabove
ORDER id DESC
LIMIT 10;

我在之前的帖子中问了这个问题并得到了答案。答案给了我一个查询来覆盖它并在一个查询中产生结果。

这次我要问的是这个方法。与一个大查询相反,我可以将第一个查询保存为“query_1_all_emails”,然后像表一样查询它(就像我在Access中一样)吗?如果可以的话,这是好的还是常见的做法?

2 个答案:

答案 0 :(得分:2)

您可以使用视图或将第一个查询的结果保存在临时表中,然后查询该视图/表。但是,检索您所关注信息的最佳方法似乎只是使用一个查询,在以下行中:

select
    count(*),
    alert_recipient
from
    alert
group by alert_recipient
order by 1 desc
limit 10;

答案 1 :(得分:1)

“查询查询”的方法包括:

创建一个视图。 使用派生表,也就是带别名的子查询。这是如何运作的:

select count(distinct alert_recipient, id) 
from (SELECT alert.alert_recipient,alert_sent.id
FROM alert
INNER JOIN alert_sent
ON alert_sent.alert_id=alert.id ) temp
order id desc
limit 10

或者,您可以使用此sql创建文本文件。

SELECT alert.alert_recipient,alert_sent.id
FROM alert
INNER JOIN alert_sent
ON alert_sent.alert_id=alert.id
order id desc
limit 10

并在您想要运行它时将其复制并粘贴到查询工具中。或者,某些查询工具将允许您保存查询文件,以便您可以随时运行它们。