我厚吗? MySQL:LEFT JOIN 上的“不是唯一的表/别名”
Posted
技术标签:
【中文标题】我厚吗? MySQL:LEFT JOIN 上的“不是唯一的表/别名”【英文标题】:Am I being thick? MySQL: "Not unique table/alias" on LEFT JOIN 【发布时间】:2012-03-12 13:48:54 【问题描述】:我有以下返回“非唯一表/别名”的 SQL 语句。我很确定我只是在这里遗漏了一些明显的东西,在提及StockID
时可能不够具体,因为它是Stock
和SuppliersStock
的常见字段名称。 Stock
中的主键,SuppliersStock
中的外键
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
包含新库存的信息订单,外键引用 Stock
和 Suppliers
。
我想做的是返回BuyingPrice
(来自Stock
)、StockID
、Quantity
(来自SuppliersStock
)字段,这样我就可以生成订购新库存的成本清单。
免责声明:我知道,关于 SQL 连接的另一个问题。不要伤害我!我用谷歌搜索过,我已经搜索过,但我有点困惑,老实说,我试图寻找一个类似的问题,以了解更多关于我可以做些什么来自己解决这个问题,但我想出了王牌。请帮忙?
【问题讨论】:
好吧,你使用表Stock
两次没有给他们一个别名,当然它会抛出那个错误给你。此外,您在连接条件上使用了SuppliersStock.StockID
,但您没有使用该表
有趣的是标题中问题的答案是“是的,你很厚”:)
【参考方案1】:
您的 'from' 和 'left join' 都指的是同一个表 'Stock'。更改其中一个以引用“SupplierStock”
【讨论】:
【参考方案2】:看起来您正在跳过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 />
【讨论】:
谢谢迈克尔,是的,SuppliersStock 是一个不同的表。猜猜我毕竟是厚实的! :)【参考方案3】:问题是你加入Stock
和Stock
而不是SuppliersStock
,所以当你说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 />
【讨论】:
【参考方案4】:您正在加入 Stock 本身,这意味着查询不知道您引用的是哪个 Stock。
如果这是您想要的,请为连接表创建一个别名:JOIN Stock AS SuppliersStock
【讨论】:
以上是关于我厚吗? MySQL:LEFT JOIN 上的“不是唯一的表/别名”的主要内容,如果未能解决你的问题,请参考以下文章
MySQL left join right join inner join
MySQL FULL JOIN 不工作,但 RIGHT 和 LEFT 加入工作