我厚吗? 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 时可能不够具体,因为它是StockSuppliersStock 的常见字段名称。 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 包含新库存的信息订单,外键引用 StockSuppliers

我想做的是返回BuyingPrice(来自Stock)、StockIDQuantity(来自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】:

问题是你加入StockStock 而不是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 查询结果

LEFT JOIN 上的数据库规范化?

MySQL left join right join inner join

MySQL FULL JOIN 不工作,但 RIGHT 和 LEFT 加入工作

MYSQL - 仅当 LEFT JOIN 中的行不存在时才选择

mysql left join 可以不写on吗