繁体   English   中英

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

[英]A problem with SQL when selecting data from two tables

我需要这个结果

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 , amount , name

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

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
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。 它将返回条件中指定的所有金额。

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

FROM orders, customers

CROSS JOIN
你应该做的是一个带有ON子句的INNER JOIN ,这样每一行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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM