假設我在 SQL Server 中有一個如下所示的表:
| AGGREGATE_KEY | 值_1 |
|---|---|
| 甲、乙 | 食品級 |
我想將該表連接到另一個看起來像這樣的表
| 鑰匙 | 值_2 |
|---|---|
| 一種 | DAH |
要實作以下輸出:
| AGGREGATE_KEY | 值_1 | 值_2 |
|---|---|---|
| 甲、乙 | 食品級 | DAH |
uj5u.com熱心網友回復:
擴展我的評論。如果您因為無法修復資料(因為架構確實已損壞)而陷入困境,并且您使用的是較新版本的 SQL Server,則可以使用string_split()在加入之前將分隔字串拆分為單個記錄。但是,如果您的資料很大,這將會很慢。
SELECT
t1.aggregate_key,
t1.value_1,
t2.value_2
FROM t1
CROSS APPLY STRING_SPLIT(AGGREGATE_KEY, ',') keys
INNER JOIN t2 ON keys.value = t2.[key];
--------------- --------- ---------
| aggregate_key | value_1 | value_2 |
--------------- --------- ---------
| A,B | FOO | DAH |
--------------- --------- ---------
uj5u.com熱心網友回復:
如果您標準化您的表格設計會更好。推薦使用它,這將使您的查詢和連接更有效。
對于當前共享的示例,您可以使用LIKE來匹配這兩個欄位。CONCAT可用于添加通配符以協助模式匹配。
SELECT t1.*, t2.Value_2, CONCAT(',',t1.AGGREGATE_KEY,',') as NEW_T1_AGGREGATE_KEY, CONCAT('%,',t2.[KEY],',%') as NEW_T2_KEY FROM t1 INNER JOIN t2 ON CONCAT(',',t1.AGGREGATE_KEY,',') LIKE CONCAT('%,',t2.[KEY],',%') GOAGGREGATE_KEY | 值_1 | 值_2 | NEW_T1_AGGREGATE_KEY | NEW_T2_KEY :------------ | :------ | :------ | :-------------------- | :--------- A,B | FOO | DAH | ,A,B, | %,一種,%
SELECT t1.*, t2.Value_2 FROM t1 INNER JOIN t2 ON CONCAT(',',t1.AGGREGATE_KEY,',') LIKE CONCAT('%,',t2.[KEY],',%') GOAGGREGATE_KEY | 值_1 | 值_2 :------------ | :------ | :------ A,B | FOO | DAH
在此處查看作業演示 db<>fiddle
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/343716.html
標籤:sql sql-server 查询语句
