sql - 这两种在 SQL 中连接表的方法之间的真正区别是什么
问题描述
我看到人们在 SQL 中使用两种不同的方法来加入表;例如,我有两个表:
Table A Table B
DeliveryDate EMP Hours Date EMP Route
5/14/2017 611300 1 5/14/2017 611300 11101
5/14/2017 611301 3 5/14/2017 611301 11102
5/13/2017 611300 4 5/13/2017 611300 11101
5/13/2017 611301 5 5/13/2017 611301 11102
5/13/2017 611301 11103
对于这两个表,EMP(employee id) 是字符串,小时数是数字,基本上想将拖车表连接在一起,以获得员工工作的小时数和他工作的路线数。我看到人们使用两种不同的代码来达到目的,但是这两种方法之间的真正区别是什么?哪一个更好?下面的代码:
代码 1:
SELECT C.DELIVERYDATE,C.EMP,C.HOURS,D.ROUTES
FROM
(
SELECT
A.DeliveryDate, A.EMP, A.Hours
FROM
A
) C,
(
SELECT
B.DATE,B.EMP,COUNT(B.ROUTE) AS ROUTES
FROM
B
group BY B.DATE,B.EMP
)D
WHERE C.DeliveryDate=D.DATE
AND C.EMP=D.EMP
代码 2:
SELECT C.DELIVERYDATE,C.EMP,C.HOURS,D.ROUTES
FROM
(
SELECT
A.DeliveryDate&A.EMP AS DATEEMP, A.DELIVERYDATE,A.EMP,A.Hours
FROM
A
) C,
(
SELECT
B.DATE&B.EMP AS DATEEMP,B.DATE,B.EMP,COUNT(B.ROUTE) AS ROUTES
FROM
B
group BY B.DATE,B.EMP
)D
WHERE C.DATEEMP=D.DATEEMP
非常感谢
解决方案
正确的连接语法是这样的:
Select * from table1 a join table2 b on a.fkey=b.pkey where [add conditions here]
推荐阅读
- linux - CSI 摄像头驱动程序不显示 ffplay 的输出
- django - 在 Django 3.2.2 版中更改 DateTimeField 格式
- sql - SQL 帮助以块的形式“透视”表
- java - SPEL:如何从地图中获取多个值并保持格式化
- c++ - 如果模板从未在未评估的上下文之外被调用,是否返回 declval UB?
- date - DAX 如何在范围内填充缺失的日期(报表生成器)
- node.js - ProcessContainerFork.js pm2“意外令牌导入”节点 14
- javascript - 使用反应原生元素创建选项卡
- python - 合并DataFrame中的上下行
- python - 如何使用带有转换器 python 的 3D 列表的标记器?