加入两个值以获取其他表-SQL中的描述

时间:2016-06-27 08:18:49

标签: sql oracle oracle11g

我有一个场景,我需要连接两个值并找到材料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

我不确定如何加入这两个表。请建议。

2 个答案:

答案 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