【发布时间】:2019-10-14 22:06:24
【问题描述】:
我是 SQL 新手。
我希望执行一个涉及两个表作为等值连接和自然连接的查询,我在其中计算客户按城市下订单的实例。如果客户 ID 出现在 ordertable 关系中,我假设客户已下订单。
我正在尝试在一个查询中组合 equijoin、COUNT() 和 GROUP BY,然后在另一个查询中使用 NATURAL JOIN 重复相同的查询。
请参阅下面的代码了解我的尝试及其结果。
以下等值连接:
SELECT customer.city, COUNT(*) AS total FROM customer, ordertable
WHERE customer.cust_id = ordertable.cust_id
GROUP BY customer.city
ORDER BY customer.city ASC
;
产量
- 城市 |计数
- 顺丰 | 1
- SLC | 7
- 图森 | 2
但是:
SELECT city, COUNT(*) AS total
FROM customer
NATURAL JOIN orderline
GROUP BY customer.city, city
ORDER BY customer.city ASC
;
产量
- 城市|总计
- 洛杉矶 | 34
- SF |17
- SLC | 170
- 图森 | 34
我相信第一组结果是正确的,但我不明白为什么这两种不同的方法会产生不同的结果。
【问题讨论】:
-
我会避免这两种类型并使用适当的
JOIN ON子句。第一种样式不再是“标准”,第二种不显示JOIN使用了哪些特定列。 -
请在代码问题中给出minimal reproducible example--剪切&粘贴&可运行代码;具有期望和实际输出(包括逐字错误消息)的示例输入(作为初始化代码);标签和版本;明确的规范和解释。这包括您可以提供的最少代码,即您显示的代码可以通过您显示的代码扩展为不可以。 (调试基础。)对于包含 DBMS/产品和 DDL 的 SQL,其中包括约束和索引以及表格格式的初始化。