Sql-Server
如何從另一個表的 nvarchar 列中的一個表中搜尋 id
我有 2 張桌子
table1 ( id int, name nvarchar) table2 ( pid int, parameters nvarchar)
table2 中的參數包含 nvarchar 格式的 table1.id,如“some text 12345 some text”,其中 12345 是 table1 中包含的 id。現在我需要找到 table2.parameters 中提到的所有 table1.id
所以對於我的腳本是這樣的,但這不起作用
select id, name from table1 r where exists ( select [Parameters] from table2 where [Parameters] like cast(r.id as nvarchar(15)) )
我不能將 % 與 like 一起使用,但我需要它。我有什麼辦法可以做到?
是的,您可以使用
%
withLIKE
。由於您將INT
“id”轉換為字元串,因此您可以%
在兩側連接字元。但是您還需要包含一個空格,將它們中的每一個與轉換後的“id”分開,這樣您就沒有 23 的“id”與parameters
“abc 1234 def”之類的值匹配。是的,您可以JOIN
使用表格,因為這只是表達您已經嘗試過的相同事物的不同方式。設置
-- DROP TABLE #table1; CREATE TABLE #table1 ( [id] INT NOT NULL PRIMARY KEY, [name] NVARCHAR(30)); -- DROP TABLE #table2; CREATE TABLE #table2 ( [pid] INT NOT NULL PRIMARY KEY, [parameters] NVARCHAR(500)); SET NOCOUNT ON; INSERT INTO #table1 ([id], [name]) VALUES (1, N'a'); INSERT INTO #table1 ([id], [name]) VALUES (2, N'b'); INSERT INTO #table1 ([id], [name]) VALUES (3, N'c'); INSERT INTO #table1 ([id], [name]) VALUES (12, N'ab'); INSERT INTO #table1 ([id], [name]) VALUES (23, N'bc'); INSERT INTO #table1 ([id], [name]) VALUES (123, N'abc'); INSERT INTO #table2 ([pid], [parameters]) VALUES (1, N'some text 12345 some text'); INSERT INTO #table2 ([pid], [parameters]) VALUES (2, N'DD 2 DD'); INSERT INTO #table2 ([pid], [parameters]) VALUES (3, N'EEE EE 123 EEEEE'); INSERT INTO #table2 ([pid], [parameters]) VALUES (4, N'NO23 12NO'); INSERT INTO #table2 ([pid], [parameters]) VALUES (5, N'HHHHHH YYY 23 ZZZZZ'); INSERT INTO #table2 ([pid], [parameters]) VALUES (6, N'QQQQQ r2q RRRRR');
相關子查詢
SELECT r.[id], r.[name] FROM #table1 r WHERE EXISTS ( SELECT * FROM #table2 tmp WHERE tmp.[parameters] LIKE N'% ' + CONVERT(NVARCHAR(15), r.[id]) + N' %' ); /* id name 2 b 23 bc 123 abc */
加入
SELECT t1.[id], t1.[name], t2.[pid] FROM #table1 t1 INNER JOIN #table2 t2 ON t2.[parameters] LIKE N'% ' + CONVERT(NVARCHAR(15), t1.[id]) + N' %'; /* id name pid 2 b 2 23 bc 5 123 abc 3 */