gpt4 book ai didi

sql - 我如何决定加入表的键

转载 作者:行者123 更新时间:2023-12-03 02:07:59 24 4
gpt4 key购买 nike

我有两个表:orderscustomer

订单:

+--------+-----------+------------+-------------+-------------+
| ord_no | purch_amt | ord_date | customer_id | salesman_id |
+--------+-----------+------------+-------------+-------------+
| 70009 | 270.65 | 2012-09-10 | 3001 | 5005 |
| 70002 | 65.26 | 2012-10-05 | 3002 | 5001 |
| 70004 | 110.50 | 2012-08-17 | 3009 | 5003 |
| 70005 | 2400.60 | 2012-07-27 | 3007 | 5001 |
| 70008 | 5760.00 | 2012-09-10 | 3002 | 5001 |
| 70010 | 1983.43 | 2012-10-10 | 3004 | 5006 |
| 70003 | 2480.40 | 2012-10-10 | 3009 | 5003 |
| 70011 | 75.29 | 2012-08-17 | 3003 | 5007 |
| 70013 | 3045.60 | 2012-04-25 | 3002 | 5001 |
| 70001 | 150.50 | 2012-10-05 | 3005 | 5002 |
| 70007 | 948.50 | 2012-09-10 | 3005 | 5002 |
| 70012 | 250.45 | 2012-06-27 | 3008 | 5002 |
+--------+-----------+------------+-------------+-------------+

客户:

+-------------+----------------+------------+-------+-------------+
| customer_id | cust_name | city | grade | salesman_id |
+-------------+----------------+------------+-------+-------------+
| 3002 | Nick Rimando | New York | 100 | 5001 |
| 3007 | Brad Davis | New York | 200 | 5001 |
| 3005 | Graham Zusi | California | 200 | 5002 |
| 3008 | Julian Green | London | 300 | 5002 |
| 3004 | Fabian Johnson | Paris | 300 | 5006 |
| 3009 | Geoff Cameron | Berlin | 100 | 5003 |
| 3003 | Jozy Altidor | Moscow | 200 | 5007 |
| 3001 | Brad Guzan | London | | 5005 |
+-------------+----------------+------------+-------+-------------+

我要解决的问题是

Write a SQL statement to make a list with order no, purchase amount, customer name and their cities for those orders which order amount between 500 and 2000.

我的查询是

SELECT ord_no, purch_amt, cust_name, city
FROM orders o
JOIN customer c
ON o.customer_id = c.customer_id
WHERE purch_amt BETWEEN 500 AND 2000

上面的查询给出了正确的答案 this链接。但我不明白要加入哪个专栏。

我已经加入了 o.customer_id = c.customer_id 上的表,但是如果我加入 salesman_id 上的两个表会怎样。

为什么加入customer_id是正确的,而salesman_id是错误的。我想了解一般当表中存在多个公共(public)列(在本例中 customer_idsalesman_id)

最佳答案

要回答的问题:customer.salesman_id 代表什么?

orders.salesman_id 显然告诉我们哪个推销员卖了东西,而 orders.customer_id 告诉我们谁买了它。因此,我们通过 customer_id 加入,以便获取订单的客户名称。

customer.salesman_id 可能意味着类似于通常向客户销售产品的推销员,这与任务完全无关。

但是,customer_id 也可能仅与 salesman_id 结合使用才有效。因此,1 号推销员有 1 号客户,但 2 号推销员也有(另一个)1 号客户。这将是复合键,即 salesman_id + customer_id 将是客户的主键,自然也是订单的外键。那么你必须加入两列。 (但是,将这些列称为 ID 是一个坏主意。salesman_number + customer_number 会是更好的选择,以表明它们不是表的单个列ID。)

所以你看,这取决于customer.salesman_id的含义。为了编写查询,您必须了解数据模型。正如您所说,您的解决方案是正确的,customer.salesman_id 显然具有与给定任务无关的含义。

关于sql - 我如何决定加入表的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54414786/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com