Sql-Server

如何從另一個表的 nvarchar 列中的一個表中搜尋 id

  • March 6, 2019

我有 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 一起使用,但我需要它。我有什麼辦法可以做到?

是的,您可以使用%with LIKE。由於您將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
*/

引用自:https://dba.stackexchange.com/questions/231325