我有兩個表,我想檢查第二個表中是否存在值。問題在于,在第二個表中,組欄位可以是單個值,也可以是逗號分隔的值。我需要一個查詢來檢查表 2 中是否存在組值作為單個值或逗號分隔值
表格1
| ID | 團體 |
|---|---|
| 1 | 第一組 |
| 2 | 組2 |
| 3 | 第三組 |
| 5 | 第4組 |
| 6 | 第4組 |
| 7 | 組2 |
表 2
| 團體 |
|---|
| 第 1 組、第 2 組 |
| 第三組 |
選擇查詢的結果將是。
表 1 過濾結果
| ID | 團體 |
|---|---|
| 1 | 第一組 |
| 2 | 組2 |
| 3 | 第三組 |
| 7 | 組2 |
uj5u.com熱心網友回復:
理想情況下,您不應在單個列中存盤多條資訊。
但是您可以STRING_SPLIT在子查詢中使用基于集合的方式來解決這個問題。
SELECT *
FROM t1
WHERE t1.[group] IN (
SELECT TRIM(s.value)
FROM t2
CROSS APPLY STRING_SPLIT(t2.[group], ',') s
);
資料庫<>小提琴
uj5u.com熱心網友回復:
也許這就是你想要的:
select * from Table1 t1 where exists (
select * from Table2 t2 where t2.[Group] like '%' t1.[Group] '%'
)
不過要小心!!!“組”是 SQL 中的關鍵字,您不應該這樣命名欄位。
更新 Larnu 評論:
為了避免Group1和Group10匹配,我們可以這樣做:
select * from Table1 t1 where exists (
select * from Table2 t2 where (t2.[Group] like '%' t1.[Group] or t2.[Group] like '%' t1.[Group] ',%')
)
uj5u.com熱心網友回復:
嘗試使用LIKE子句連接兩個表,如下所示:
DECLARE @t1 TABLE (id INT, [group] VARCHAR(255))
DECLARE @t2 TABLE ([group] VARCHAR(255))
INSERT INTO @t1 VALUES (1,'g1'),(2,'g2'),(3,'g3'),(5,'g4'),(6,'g4'),(7,'g2')
INSERT INTO @t2 VALUES ('g1,g2'),('g3')
SELECT DISTINCT t1.*
FROM @t1 t1 INNER JOIN @t2 t2
ON t2.[group] LIKE '%' t1.[group] OR t2.[group] LIKE '%' t1.[group] ',%'
結果:
| ID | 團體 |
|---|---|
| 1 | g1 |
| 2 | g2 |
| 3 | g3 |
| 7 | g2 |
更新以適應 Larnu 對 Carlos 帖子的評論
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/328792.html
標籤:sql-server
