0

我正在使用教科书和从我的 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 中所做的那样)?如果可以,这是好的还是常见的做法?

4

2 回答 2

2

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

select
    count(*),
    alert_recipient
from
    alert
group by alert_recipient
order by 1 desc
limit 10;
于 2013-07-05T05:36:06.910 回答
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

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

于 2013-07-05T02:34:03.417 回答