Mysql 如何通过sql将更多的字符串搜索成更小的字符串
我有一个库存表,其中所有项目都有唯一的ID,如S0001、S0002、T0001、T0002,。。等等,以及各自的成本Mysql 如何通过sql将更多的字符串搜索成更小的字符串,mysql,sql-server,database,Mysql,Sql Server,Database,我有一个库存表,其中所有项目都有唯一的ID,如S0001、S0002、T0001、T0002,。。等等,以及各自的成本 Inventory Table -- ItemID Cost S0001 5.5 S0002 2.5 T0001 2.5 T0002 1.5 现在让我们假设我创建了一个发票,其中有人购买S0001,因此保存在该发票表中的值是S0001(衬衫),如果有人购买S0002,它将是S0002(衬衫) 我想从库存数据库中检索已创建发票中每个项目的项目成本价格。我从发票数据库中获取唯一I
Inventory Table --
ItemID Cost
S0001 5.5
S0002 2.5
T0001 2.5
T0002 1.5
现在让我们假设我创建了一个发票,其中有人购买S0001,因此保存在该发票表中的值是S0001(衬衫),如果有人购买S0002,它将是S0002(衬衫)
我想从库存数据库中检索已创建发票中每个项目的项目成本价格。我从发票数据库中获取唯一ID(描述),例如S0001(衬衫),而不是获取物品的唯一ID
如何查询从库存数据库中的发票数据库中获取的物料名称的成本价(存在于库存中)。我从发票表中搜索的字符串的字符数比我搜索到的字符串的字符数多。
我的目标是从库存表中检索S0001(衬衫)的成本,这将是5.5
注意:不幸的是,我不能为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 )
对于sql server,只需将
locate
更改为charindex
,并将双引号更改为单引号。我还可以查找最后一个“(”或“)”,因为它的下面也是一种可能性Shirt(S0001)
Shirt(peterEngland)(S0001)
因此,如果我可以调整最后一个“…它解决了我的问题。另外,我还编辑了这个问题,所以在你的itemname中没有itemid的通用格式@A.Learn可以是任何字符,但最后会是(itemId)…例如XXXXXXX(S0001)当我发布原始问题时是我的错误,我在最后一次评论之前更正了它。我向您道歉。@A.Learn,但有一种方法可以做到。有点长。所以,有时候让我把它写下来。
SELECT * FROM tblInvoice INNER JOIN tblInventory ON
( SUBSTRING_INDEX( SUBSTR(ItemName, 1, CHAR_LENGTH(ItemName) - 1), "(", -1) = ItemId )