我想了解客户从给定制造商订购了什么产品。
我有这些表格(带列):
- 商品(item_num、order_num、stock_num、manu_code、数量等)
- 库存(stock_num、manu_code、说明、unit_price 等)
- 订单(order_num、order_date、customer_num、ship_instruct 等)
- 客户(customer_num、fname、lname、company、address1 等)
这是我现在的查询,但我相信它返回某种叉积:
SELECT concat(c.fname," ", c.lname) AS fullname, s.description
FROM items i, stock s, customer c JOIN orders o
ON o.customer_num=c.customer_num
WHERE o.order_num=i.order_num AND i.manu_code = 'ANZ';
返回一个大列表(1000 行),其中包含大量重复的整体,
Anthony Higgens | baseball gloves
Anthony Higgens | baseball gloves
. .
. .
. .
Kim Satifer | running shoes
我做错了什么?
最佳答案
FROM items i, stock s, customer c
是否对涉及的三个表进行笛卡尔连接,但是您的 WHERE
对笛卡尔连接几乎没有限制。
如果你做一些更明确的加入,你将大大减少重复并更正确地表达你想要做的事情。使用INNER JOINS
以及正确的连接标准,而不是仅仅列出 FROM
之后的所有表。示例:(还有更多这样的条件,您需要应用于 JOINS,但这只是一个示例):INNER JOIN stock ON stack.manu_code = items.manu_code
.
最后,您可以使用SELECT DISTINCT
或GROUP BY
以进一步减少重复。但是如果你得到明确的 JOIN
如果 JOIN 标准正确,则不应有太多重复项。
关于mysql - MySQL中如何连接多个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14444872/