找到与另一个表中的任何元素匹配的第一条记录

时间:2017-02-22 01:04:09

标签: tsql sql-server-2014

我正在寻找一种在T-SQL(SQL Server 2014)中实现此目的的有效方法

我有一个像这样的静态基本元素表变量:

╔════╦═════════════╗
║ Id ║   Hashtag   ║
╠════╬═════════════╣
║  1 ║ Thailand    ║
║  2 ║ Philippines ║
║  3 ║ Indonesia   ║
║  4 ║ Brazil      ║
║  5 ║ Mexico      ║
║  6 ║ Nicaragua   ║
║  7 ║ Colombia    ║
║  8 ║ Malaysia    ║
╚════╩═════════════╝

我还有另一个表变量(动态填充查询),如下所示:

╔════╦══════════╗
║ Id ║ Hashtag  ║
╠════╬══════════╣
║  1 ║ Live     ║
║  2 ║ Brazil   ║
║  3 ║ Like     ║
║  4 ║ Thailand ║
║  5 ║ Malaysia ║
║  6 ║ Love     ║
╚════╩══════════╝

我需要做的是遍历第二个表并查看每个记录是否存在于基表中,当它找到第一个匹配时停止迭代并返回找到的值,在我的示例中,查询应返回“巴西“因为它是降序的第一条记录,也包含在基表中。

我目前正在使用带有第二个表元素的快进光标并查询第一个表来查找匹配,它可以工作,但我不是T-SQL的专家所以我请求你的帮助知道是否有更有效的方式。

2 个答案:

答案 0 :(得分:2)

假设您想要找到第一个匹配的单个记录,您可以执行以下操作:

user

内连接仅返回两个表中都存在主题标签的记录。然后我们只需从动态表中选择最小ID,并将相应的#标签作为输出。

实际上,这可以进一步简化为使用单个连接,如下所示:

user

答案 1 :(得分:1)

作为Shree答案的替代方案,我们可以在此处使用行号来识别Id所订购的第一个匹配记录:

WITH cte AS(
    SELECT t2.Hashtag,
           ROW_NUMBER() OVER (PARTITION BY Id ORDER BY Id) rn
    FROM table2 t2
    INNER JOIN table1 t1
        ON t2.Hashtag = t1.Hashtag
)
SELECT t.Hashtag
FROM cte
WHERE t.rn = 1