我需要这个结果
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
答案 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