2017-03-05 64 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