使用T-SQL

时间:2017-07-10 16:35:41

标签: sql sql-server tsql

我怀疑从表格中的一列中找到文字;在其他表的其他栏目中。

想象一下,你有这些专栏:

enter image description here

你想在[B] .Y

中找到[A] .X的完整文本

并发现你在哪里比赛。黄色显示这个选择: enter image description here

我一直在考虑使用“CONTAINS”功能,但我认为这可能不是最好的主意。因为您必须编写需要查找的文本(而不是列的完整文本)。

CONTAINS T-SQL

我认为它可能是这样的:

Use AdventureWorks2012;  
GO  
SELECT [B].Y  
FROM Production.Product  
WHERE CONTAINS(([A].Y), [A].X);  

But it doesn't work.

哪个是最佳选择?

我正在使用SQL SERVER V17.0

感谢!!!

4 个答案:

答案 0 :(得分:3)

我会选择like

select b.y, a.x 
from b join
     a
     on b.y like '%' + a.x + '%' ;

然而,在SQL Server中没有一种非常有效的方法来执行此逻辑。

答案 1 :(得分:1)

这是一个快速示例,用于搜索另一个表中定义的特定单词集的字符串列表。这个例子只搜索系统错误消息文本并查找单词'overflow'和'CryptoAPI',但是你将用'A'和'sys.messages'表替换单词table和表'B'

注意:这不是搜索大量文本的最有效方式。

-- CREATE TEMP TABLE WITH WORDS TO MATCH
CREATE TABLE #words (
    [Word] nvarchar(100)
)

-- SAMPLE STRINGS
INSERT INTO #words VALUES ('overflow')
INSERT INTO #words VALUES ('CryptoAPI')

-- SEARCH THROUGH SYSTEM ERROR MESSAGES FOR SAMPLE STRINGS
SELECT [W].[Word] AS 'Matched word'
    , [M].[text]
FROM [sys].[messages] AS [M]
    JOIN #words AS [W]
        ON [M].[text] LIKE '%' + [W].[Word] + '%'

答案 2 :(得分:1)

CREATE TABLE #TempA
(ColumnX VARCHAR(10)
);
CREATE TABLE #TempB
(ColumnY VARCHAR(100)
);
INSERT #TempA
VALUES('fish'),('burguer'),('sugar'),('tea'),('coffee'),('window'),('door');

INSERT #TempB
VALUES('I like potatoes'),('I eat sugar'),('I eat sugar with onions'), ('I have a car'),('I don''t like dogs');

SELECT *
FROM #TempB b
WHERE EXISTS(SELECT 1 FROM #TempA a WHERE CHARINDEX(a.ColumnX, b.ColumnY,1) > 0);

答案 3 :(得分:1)

我同意@GordonLinoff。 Like是我也想要的,但我想在所提供的答案中做出一点改进。

CREATE TABLE #TempA (ColumnX VARCHAR(10));
CREATE TABLE #TempB (ColumnY VARCHAR(100));

INSERT #TempA
VALUES ('fish')
    ,('burguer')
    ,('sugar')
    ,('tea')
    ,('coffee')
    ,('window')
    ,('door');

INSERT #TempB
VALUES ('I steam potatoes')
    , ('I like potatoes')
    ,('I eat sugar')
    ,('I eat sugar with onions')
    ,('I have a car coffee')
    ,('I don''t like dogs')
    ,('Window is clean')
    ,('Open the door')
    ;


SELECT b.ColumnY
    ,a.ColumnX
FROM #TempB b
INNER JOIN #TempA a ON ' '+ b.ColumnY + ' ' LIKE '% ' + a.ColumnX + ' %'

这将在STEAM中找不到TEA。