首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL --这个查询是如何执行关系划分的?

MySQL --这个查询是如何执行关系划分的?
EN

Stack Overflow用户
提问于 2014-03-27 05:03:03
回答 1查看 2.3K关注 0票数 0

我需要进行一个查询,在MySQL中的两个表之间执行关系划分。经过一些研究后,我发现下面的查询将执行关系划分(而且它运行得很好),但是无论我多么努力地尝试,我都找不出它是如何工作的或为什么工作的。

以下是两张表格:

代码语言:javascript
运行
复制
mysql> SELECT * FROM Works_on;
+-----------+-----+-------+
| Essn      | Pno | Hours |
+-----------+-----+-------+
| 123456789 |   1 |  32.5 |
| 123456789 |   2 |   7.5 |
| 333445555 |   1 |   0.0 |
| 333445555 |   2 |  10.0 |
| 333445555 |   3 |  10.0 |
| 333445555 |  10 |  10.0 |
| 333445555 |  20 |  10.0 |
| 333445555 |  30 |   0.0 |
| 453453453 |   1 |  20.0 |
| 453453453 |   2 |  20.0 |
| 666884444 |   3 |  40.0 |
+-----------+-----+-------+

mysql> SELECT * FROM Project;
+-----------------+---------+-----------+------+
| Pname           | Pnumber | Plocation | Dnum |
+-----------------+---------+-----------+------+
| ProductX        |       1 | Bellaire  |    5 |
| ProjectY        |       2 | Sugarland |    5 |
| ProjectZ        |       3 | Houston   |    5 |
| Computerization |      10 | Stafford  |    4 |
| Reorganization  |      20 | Houston   |    1 |
| Newbenefits     |      30 | Stafford  |    4 |
+-----------------+---------+-----------+------+

SQL Fiddle

problem:查找在Project表中列出的所有项目的员工的Essn。因此,基本上,Works_on除以项目的基础上的P数。

我写的查询是:

代码语言:javascript
运行
复制
mysql> SELECT DISTINCT Essn FROM Works_on w1 
WHERE NOT EXISTS 
(SELECT * FROM Project p 
    WHERE NOT EXISTS 
    (SELECT * FROM Works_on w2
        WHERE w2.Essn = w1.Essn AND w2.Pno = p.Pnumber));
+-----------+
| Essn      |
+-----------+
| 333445555 |
+-----------+

请帮助我理解这个查询是如何工作的。尤其是,最内部的问题使我感到困惑。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-27 05:41:02

你知道,我会坚持这样做的:

代码语言:javascript
运行
复制
SELECT Essn
   FROM Works_on 
 WHERE Pno IN (SELECT Pnumber 
                 FROM Project)
GROUP BY 
       Essn
HAVING COUNT(*) = (SELECT COUNT(*)
                 FROM Project);

我相信有一些绩效优势 (反对您的查询),也有一个清晰的逻辑结构。

SQL Fiddle

旁听建议--如果你想理解某件事的逻辑,试着自己去做。即使你不明白

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22678698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档