2014-12-02 74 views
0

作为一个笔记,我已经搜索了很多,但似乎无法掌握如何解决它仍然。我仍然在学习SQL服务器的来龙去脉,请耐心等待。多部分标识符无法绑定异常

我想从两个表获取量的期望输出,但是当我开始子查询加入到我的发言,我会得到这个错误:

The multi-part identifier "OD.Menu Name ID" could not be bound.

这是我的声明。

Select IT.[Item Name], SUM(OD.Quantity) * SI.Quantity as QTY from [Order Detail_T] as OD, 
dbo.SumOfIngredientsQty_V as SI 
join [Ingredients Qty_T] 
on [Ingredients Qty_T].[Menu Name ID] = OD.[Menu Name ID] 
join Ingredients_T as It 
on [Ingredients Qty_T].[Ingredients ID] = IT.[Ingredients ID] 
where SI.Quantity in (Select SumOfIngredientsQty_V.Quantity as SI from SumOfIngredientsQty_V) 
Group by IT.[Item Name] 

我也创建了一个关联到上述声明一个观点:

create view SumOfIngredientsQty_V 
as 
Select [Item Name], Sum(Quantity) as Quantity from [Ingredients Qty_T] 
join [Ingredients_T] 
on [Ingredients Qty_T].[Ingredients ID] = Ingredients_T.[Ingredients ID] 
group by [Item Name] 
go 

有人可以告诉我为什么我会得到“无法绑定”异常。另外如果需要的话,我可以包括表格的关系。

编辑这里有关系(我不能上传图片,但我希望这会做)

Ingredients_T : (PK) Ingredients ID, Item Name 
Ingredients Qty_T : (FK) Menu Name ID, (FK) Ingredients ID, Quantity 
Menu Name_T : (PK) Menu Name ID, Price, Menu Name 
Order Detail_T : (PK) Order Detail ID, (FK) Order ID, (FK) Menu Name ID, Quantity 

Ingredients_T > Ingredients Qty_T < Menu Name_T > Order Detail_T 

的(<)表示,其中PK去。

+0

@bummi如果它没有列,我将如何去添加列? – YoHanYolo 2014-12-02 18:14:53

回答

0

检查您的拼写OD.[Menu Name ID]确保您没有遗漏下划线或任何空格。

可以输出列名作为SQL Server有他们存储使用的查询,如:

select c.name as colname, t.name as tablename 
from sys.columns c 
join sys.tables t on c.object_id = t.object_id 
where c.name like '%Menu%' 
order by tablename 

上面的查询限制列和表到那些有柱“菜单”之名的地方。

+0

拼写检查结果。此外,我做了上述查询,如果我理解你想让我看看菜单名称ID确实对应于它所做的Order Detail_T表。所以如果它确实有一列可能是什么问题? – YoHanYolo 2014-12-02 21:02:46

+0

@YoHanYolo - 如果您尝试一个简单的'选择top 5 OD。[Order Detail_T] OD'的[菜单名称ID]会发生什么? – bf2020 2014-12-02 21:46:51

+0

它只会列出菜单名称ID的前5个条目。 – YoHanYolo 2014-12-03 00:20:00