是否可以根據 SQL 中的關鍵字字串添加更多行?
表A
PID PromotionName
1 OUT_EC_D10_V500K_FamilyCare_PROCO
2 OUT_EC_D5_V50K_Lunchbox_PROCO
3 OUT_EC_D5_V50K_PROCO
表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
如何根據表B的promotion_code在表A的PromotionName中查找關鍵字為“FamilyCare”的字串?如果存在,它將在輸出中添加更多行
對 SQL 有幫助嗎?
uj5u.com熱心網友回復:
以下是您如何實作這一目標:
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'
您必須pid在兩個地方(在 UNION 之前和之后)更新您的。
請注意,表是使用 LIKE 運算子與單詞前后的 % 連接的。因此,如果字串的一部分存在于另一列中,則此連接。
db<>小提琴鏈接在這里
uj5u.com熱心網友回復:
一個選項是開始構建子查詢分解以及通過a.promotionName LIKE '%'||b.promotion_code||'%'條件連接表,同時過濾 by b.promotion_code = 'FamilyCare',然后添加另一個查詢以組合結果集 by 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
如果最上面的查詢不匹配,則不會回傳任何行。例如。該查詢將檢查您提供的文字是否存在
Demo
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/356367.html
