我有一个场景,我需要连接两个值并找到材料desc。
Product table :
-------------
PRODUCT SUGGESTIONS
item1 item2
item1 item3
item1 item3&item4
item1 item2&item3
Product Master table:
--------------------
PRODUCT DESC
item1 EBIKE
item2 BIKE TOOLS
item3 BIKE PAINT
item4 Regular Bike
输出
PRODUCT SUGGESTIONS PRODUCT DESC
item1 item2 BIKE TOOLS
item1 item3 BIKE PAINT
item1 item3&item4 BIKE PAINT& Regular Bike
item1 item2&item3 BIKE TOOLS&BIKE PAINT
我不确定如何加入这两个表。请建议。
答案 0 :(得分:2)
如果您正在使用子字符串匹配(即使用INSTR()
或LIKE
),则存在进行部分匹配的问题(即item1
是{{1}的子字符串你需要处理这种情况。
假设您使用的分隔符永远不会成为产品ID的一部分,那么您可以使用:
item11
然而,更好的解决方案是将产品和建议正确地分成单独的表格:
SELECT PT.PRODUCT,
PT.SUGGESTIONS,
LISTAGG(PM.DESC, '&') WITHIN GROUP (ORDER BY PM.DESC)
AS PRODUCT_DESC
FROM PRODUCT PT
INNER JOIN
PRODUCTMASTER PM
ON ( '&'||PT.SUGGESTIONS||'&' LIKE '%&'||PM.PRODUCT || '&%' )
GROUP BY PT.PRODUCT, PT.SUGGESTIONS
答案 1 :(得分:1)
首先,这不是一个好的桌面设计。您正在使用不适合规范化规则的表单。
这可能适用于这种情况。
SELECT PT.PRODUCT, PT.SUGGESTIONS, LISTAGG(PM.DESC, '&') WITHIN GROUP (ORDER BY PM.DESC) AS PRODUCT_DESC
FROM PRODUCT PT, PRODUCTMASTER PM
WHERE INSTR(PT.SUGGESTIONS,PM.PRODUCT) != 0
GROUP BY PT.PRODUCT, PT.SUGGESTIONS