嗨,我想通過字串中的子字串加入表,并回傳不作為新行加入。那可能嗎?這是一個例子
ID | 價格 |
---|---|
07a | 50 |
1b7 | 60 |
7TC | 40 |
產品代碼 | 細節 |
---|---|
newhair_07a | 細節A |
black_1b7_chair | 細節B |
藍色床 | 細節C |
到一個表中,它將表 ID 中的 ID 與產品表的 productCode 匹配。如果 substring 在 string 中,則將表連接在一起,并將不匹配的內容回傳到新行中。
輸出會像這樣
ID | 產品代碼 | 細節 | 價格 |
---|---|---|---|
07a | newhair_07a | 細節A | 50 |
1b7 | black_1b7_chair | 細節B | 60 |
藍色床 | 細節C | ||
7TC | 40 |
我不知道從哪里開始加入這個。請幫忙
uj5u.com熱心網友回復:
考慮以下方法
with temp as (
select id, productCode, details, price
from tableID
join tableProduct
on regexp_contains(productCode, id)
)
select * from temp
union all
select id, null, null, price
from tableID where not id in (select id from temp)
union all
select null, productCode, details, null
from tableProduct where not productCode in (select productCode from temp)
如果應用于您問題中的樣本資料 - 輸出是
uj5u.com熱心網友回復:
它看起來像一個FULL OUTER JOIN問題。假設您的productCode是包含ID的下劃線分隔值,則可以使用以下方法:
WITH joined AS (
SELECT * EXCEPT (code)
FROM tableB b JOIN UNNEST(SPLIT(productCode, '_')) code
FULL JOIN tableA a ON a.ID = code
)
SELECT * FROM joined WHERE productCode IS NULL
UNION ALL
SELECT * FROM joined WHERE productCode IS NOT NULL
QUALIFY ROW_NUMBER() OVER (PARTITION BY productCode, details ORDER BY ID NULLS LAST) = 1;
輸出:
示例表:
CREATE TEMP TABLE tableA AS (
SELECT '07a' ID, 50 price
UNION ALL
SELECT '1b7', 60
UNION ALL
SELECT '7TC', 40
);
CREATE TEMP TABLE tableB AS (
SELECT 'newhair_07a' productCode, 'detailA' details
UNION ALL
SELECT 'black_1b7_chair', 'detailB'
UNION ALL
SELECT 'blueBed', 'detailC'
);
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/494095.html
下一篇:使用SQL將字串轉換為行