从两个表中选择数据时SQL出现问题

时间:2020-03-07 11:19:13

标签: sql

我需要这个结果

order_num   amount      name
----------  ----------  ---------------
70007       948.5       Graham Zusi
70010       1983.43     Fabian Johns

来自此表(示例):

1)客户按ID排序

id      name             city          grade   salesperson_id
------  ---------------  ------------  ------  --------------
3001    Brad Guzan       London        100     5005
3002    Nick Rimando     New York      100     5001
3003    Jozy Altidore    Moscow        200     5007
3004    Fabian Johns     Paris         300     5006
3005    Graham Zusi      California    200     5002 

2)订单按order_num排序

order_num   amount     date        customer_id  saleperson_id
----------  ---------  ----------  -----------  -------------
70001       150.5      2012-10-05  3005         5002
70002       65.26      2012-10-05  3002         5001
70003       2480.4     2012-10-10  3009         5003
70004       110.5      2012-08-17  3009         5003
70005       2400.6     2012-07-27  3007         5001

我需要得到结果,其中500 <= amount <= 2000,选择order_num,金额,名称

那是我的代码,但是不起作用

SELECT orders.order_num, orders.amount, customers.name
FROM orders, customers
WHERE orders.amount >= 500 AND orders.amount <=2000
ORDER BY order_num

得到

order_num   amount      name
----------  ----------  ---------------
70007       948.5       Nick Rimando
70007       948.5       Graham Zusi
70007       948.5       Brad Guzan
70007       948.5       Fabian Johns
70007       948.5       Brad Davis
70007       948.5       Geoff Cameron
70007       948.5       Julian Green
70007       948.5       Jozy Altidore
70010       1983.43     Nick Rimando
70010       1983.43     Graham Zusi
70010       1983.43     Brad Guzan
70010       1983.43     Fabian Johns
70010       1983.43     Brad Davis
70010       1983.43     Geoff Cameron
70010       1983.43     Julian Green
70010       1983.43     Jozy Altidore

2 个答案:

答案 0 :(得分:0)

SELECT orders.order_num, orders.amount, customers.name
FROM orders, customers
WHERE customers.id = orders.customer_id  
AND (orders.amount >= 500 OR orders.amount <=2000)
ORDER BY order_num 

这是一种古老的sqlite语法,它使用WHERE来连接两个表,您可以使用内部联接。

括号是用来表示操作顺序的。

我用OR代替AND。它将返回条件中指定的所有金额。

答案 1 :(得分:0)

您的查询返回2个表的<笛卡尔乘积,因为:

FROM orders, customers

CROSS JOIN
您应该做的是一个带有INNER JOIN子句的ON,因此orders的每一行都与customers的正确行相关联:

SELECT o.order_num, o.amount, c.name
FROM orders o INNER JOIN customers c
ON c.id = o.customer_id
WHERE o.amount >= 500 AND o.amount <=2000
ORDER BY o.order_num