在 Oracle 列中查找字符串时如何添加更多行
How add more rows when find string in column Oracle
是否可以根据 SQL 中的关键字字符串添加更多行?
table一个
PID PromotionName
1 OUT_EC_D10_V500K_FamilyCare_PROCO
2 OUT_EC_D5_V50K_Lunchbox_PROCO
3 OUT_EC_D5_V50K_PROCO
table B
promotion_code itm_name quantity
Lunchbox Item name 1 1
FamilyCare Item name 2 1
FamilyCare Item name 3 1
BUY1FREE6 Item name 4 1
HiSummer Item name 5 1
FamilyCare Item name 6 1
示例:
SELECT * FROM A where pid = '1';
SQL 的输出应该是 -
PID PromotionName Itm_name quantity
1 OUT_EC_D10_V500K_FamilyCare_PROCO
2 FamilyCare Item name 2 1
3 FamilyCare Item name 3 1
4 FamilyCare Item name 6 1
如何根据 table B 的 promotion_code 在 table A 的 PromotionName 中查找关键字 'FamilyCare' 的字符串?如果存在,它将在输出中添加更多行
对 SQL 有任何帮助吗?
以下是实现此目的的方法:
SELECT PID,PromotionName, '' as Itm_name, NULL as quantity
FROM A
WHERE pid = '1'
UNION
SELECT PID, PROMOTION_NAME, Itm_name, quantity
FROM
(SELECT * FROM A inner join B on a.promotionName LIKE '%'||b.promotion_name||'%')
WHERE pid='1'
您必须在两个地方(UNION 之前和之后)更新您的 pid
。
请注意,表是使用 LIKE 运算符连接的,单词前后都有 %。因此,如果字符串的一部分存在于另一列中,则此连接。
db<>fiddle link 这里
一个选项将开始构建一个子查询分解以及通过 a.promotionName LIKE '%'||b.promotion_code||'%'
条件连接表,同时通过 b.promotion_code = 'FamilyCare'
过滤,然后添加另一个查询以通过 UNION ALL
组合结果集,然后通过ROW_NUMBER()
解析函数如
枚举一个id列
WITH ab AS
(
SELECT a.*, b.*
FROM a
JOIN b
ON a.promotionName LIKE '%'||b.promotion_code||'%'
WHERE b.promotion_code = 'FamilyCare'
), ab2 AS
(
SELECT promotion_code, itm_name, quantity
FROM ab
UNION ALL
SELECT DISTINCT promotionName, NULL, NULL
FROM ab
)
SELECT ROW_NUMBER() OVER (ORDER BY itm_name NULLS FIRST) AS pid,
a.*
FROM ab2 a
如果最上面的查询不匹配,则不会返回任何行。例如。该查询将检查您提供的文字是否存在
是否可以根据 SQL 中的关键字字符串添加更多行?
table一个
PID PromotionName
1 OUT_EC_D10_V500K_FamilyCare_PROCO
2 OUT_EC_D5_V50K_Lunchbox_PROCO
3 OUT_EC_D5_V50K_PROCO
table B
promotion_code itm_name quantity
Lunchbox Item name 1 1
FamilyCare Item name 2 1
FamilyCare Item name 3 1
BUY1FREE6 Item name 4 1
HiSummer Item name 5 1
FamilyCare Item name 6 1
示例:
SELECT * FROM A where pid = '1';
SQL 的输出应该是 -
PID PromotionName Itm_name quantity
1 OUT_EC_D10_V500K_FamilyCare_PROCO
2 FamilyCare Item name 2 1
3 FamilyCare Item name 3 1
4 FamilyCare Item name 6 1
如何根据 table B 的 promotion_code 在 table A 的 PromotionName 中查找关键字 'FamilyCare' 的字符串?如果存在,它将在输出中添加更多行
对 SQL 有任何帮助吗?
以下是实现此目的的方法:
SELECT PID,PromotionName, '' as Itm_name, NULL as quantity
FROM A
WHERE pid = '1'
UNION
SELECT PID, PROMOTION_NAME, Itm_name, quantity
FROM
(SELECT * FROM A inner join B on a.promotionName LIKE '%'||b.promotion_name||'%')
WHERE pid='1'
您必须在两个地方(UNION 之前和之后)更新您的 pid
。
请注意,表是使用 LIKE 运算符连接的,单词前后都有 %。因此,如果字符串的一部分存在于另一列中,则此连接。
db<>fiddle link 这里
一个选项将开始构建一个子查询分解以及通过 a.promotionName LIKE '%'||b.promotion_code||'%'
条件连接表,同时通过 b.promotion_code = 'FamilyCare'
过滤,然后添加另一个查询以通过 UNION ALL
组合结果集,然后通过ROW_NUMBER()
解析函数如
WITH ab AS
(
SELECT a.*, b.*
FROM a
JOIN b
ON a.promotionName LIKE '%'||b.promotion_code||'%'
WHERE b.promotion_code = 'FamilyCare'
), ab2 AS
(
SELECT promotion_code, itm_name, quantity
FROM ab
UNION ALL
SELECT DISTINCT promotionName, NULL, NULL
FROM ab
)
SELECT ROW_NUMBER() OVER (ORDER BY itm_name NULLS FIRST) AS pid,
a.*
FROM ab2 a
如果最上面的查询不匹配,则不会返回任何行。例如。该查询将检查您提供的文字是否存在