i need to have this result
x
order_num amount name
---------- ---------- ---------------
70007 948.5 Graham Zusi
70010 1983.43 Fabian Johns
from this tables (examples):
1) customers sort by 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) orders sort by 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
I need to have the result, where 500<=amount<=2000 selecting order_num , amount , name
thats my code but it doesnt work
SELECT orders.order_num, orders.amount, customers.name
FROM orders, customers
WHERE orders.amount >= 500 AND orders.amount <=2000
ORDER BY order_num
it gets
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
Advertisement
Answer
Your query returns the cartesian product of the 2 tables because this:
FROM orders, customers
is a CROSS JOIN
.
What you should do is an INNER JOIN
with an ON
clause so every row of orders
is associated to the proper row of 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