2017-03-05 75 views
1

我有一个库存表,其中所有的项目都带有唯一的ID,如S0001,S0002,T0001,T0002等等,以及它们各自的成本。如何通过sql搜索更多的字符串到更小的字符串

Inventory Table -- 
ItemID Cost 
S0001 5.5 
S0002 2.5 
T0001 2.5 
T0002 1.5 

现在可以说,我创造一个有一个人买S0001的发票,因此节省了表,该发票里面的值是S0001(衬衫),如果有人买S0002,这将是S0002(衬衫)。

Invoice Table 
InvId ItemName  quantity 
1   shirt(S0001)  1.5 
2   shirt(S0002)  1.3 

我想从已创建的发票中的每个项目的库存数据库中检索物料的成本价格。而不是获取项目的唯一ID,我得到UniqueID(说明)例如。 S0001(衬衫)从发票数据库。

如何查询库存数据库中的发票数据库中获得的物料名称的成本价格(存在于库存中)。我的搜索字符串是来自发票表格的字符,然后搜索字符串较少的字符串。 我的目标是从库存表中检索S0001(衬衫)的成本,这将是5.5。

注:不幸的是,我不能改变任何表的结构

回答

1

对于MySQL,你可以这样做

SELECT * FROM tblInvoice INNER JOIN tblInventory ON 
(LEFT(ItemName, LOCATE("(", ItemName) - 1) = ItemId) 

更新查询一些与问题的工作改变:

SELECT * FROM tblInvoice INNER JOIN tblInventory ON 
(SUBSTRING_INDEX(SUBSTR(ItemName, 1, CHAR_LENGTH(ItemName) - 1), "(", -1) = ItemId) 
+0

对于sql服务器,只需将'locate'改为'charindex'并将双引号改为单引号。 – SqlZim

+0

我也可以寻找最后的“(”或“)”为低于其也是一种可能性
衬衫(S0001)
衬衫(peterEngland)(S0001)
所以,如果我能精细最后“)” ......它解决了我的问题。 P.S我也编辑过这个问题 –

+0

所以itemname里面没有itemid的通用格式。 @ A.Learn – invisal