2012-03-12 40 views
2

我有以下SQL语句返回“非唯一表/别名”。我相当肯定我在这里只是错过了一些明显的东西,可能不够详细,因为它是StockSuppliersStock的常用字段名称。主键Stock,在SuppliersStock我正在变厚吗? MySQL:LEFT JOIN上的“不唯一表/别名”

SELECT Stock.BuyingPrice, SuppliersStock.StockID, SuppliersStock.Quantity 
FROM Stock 
LEFT JOIN Stock on Stock.StockID = SuppliersStock.StockID 
WHERE Stock.StockID = <some-integer /> 

Stock表中有关于股票的具体信息外键,Suppliers对供应商信息和SuppliersStock有新货一起StockSuppliers外键引用信息的订单。

我想要做的就是返回BuyingPrice(从Stock),StockIDQuantity(从SuppliersStock)领域,所以我可以产生的费用清单新股订货。

声明:我知道,关于SQL的另一个问题是加入。不要伤害我!我谷歌搜索,我已经搜索,但我有点困惑,我诚实地试图寻找一个类似的问题,以更多地了解我可以做些什么来解决这个问题,但要成为王牌。请帮忙?

+2

嘛,你使用的是表'库存'两次没有给他们一个别名,当然它会把这个错误给你。此外,您在连接条件中使用'SuppliersStock.StockID',但您没有使用该表 – Lamak 2012-03-12 13:51:55

+1

有趣的是,标题中问题的答案是“是的,你正在变厚”:) – Romain 2012-03-12 13:53:06

回答

5

您似乎跳过别名SuppliersStock,或者它是一个不同的表:

/* If SuppliersStock is a different table */ 
SELECT Stock.BuyingPrice, SuppliersStock.StockID, SuppliersStock.Quantity 
FROM Stock 
LEFT JOIN SuppliersStock on Stock.StockID = SuppliersStock.StockID 
WHERE Stock.StockID = <some-integer /> 

/* If SuppliersStock is the same table, needing an alias */ 
SELECT Stock.BuyingPrice, SuppliersStock.StockID, SuppliersStock.Quantity 
FROM Stock 
LEFT JOIN Stock AS SuppliersStock on Stock.StockID = SuppliersStock.StockID 
WHERE Stock.StockID = <some-integer /> 
+0

谢谢Michael,并且是的SuppliersStock是一个不同的表格。猜猜我毕竟是厚实的! :) – Bendihossan 2012-03-12 13:59:35

9

您的'from'和'left join'都是指同一张表'Stock'。更改其中的一个参考“SupplierStock”

0

的问题是你与Stock代替SuppliersStock加入Stock,所以当你说Stock.StockID MySQL不知道哪两个是你指的是。

我猜你想做到这一点:

SELECT Stock.BuyingPrice, SuppliersStock.StockID, SuppliersStock.Quantity 
FROM Stock 
LEFT JOIN SuppliersStock on Stock.StockID = SuppliersStock.StockID 
WHERE Stock.StockID = <some-integer /> 
0

你在自己加入的股票,这意味着查询不知道哪只股票你引用。 如果这是你想要的东西,做出连接表的别名:JOIN Stock AS SuppliersStock