【问题标题】:sql join string matchsql连接字符串匹配
【发布时间】:2015-10-11 12:59:22
【问题描述】:

假设我有 2 张桌子

ID      Product
----------------
 micrsoft sql 
 cisco 


ID      Product
----------------
sql
cisco agent
flash

我需要编写一个仅返回“flash”作为输出的查询,因为它在表 1 上没有匹配项。cisco 和 microsoft 在另一个表上匹配,因此需要丢弃。

这更像是一个内部连接,但使用模式/字符串匹配/包含。字符串不必是绝对匹配,也可以是子集。例如。您在一张表中有 cisco,而在另一张表中有 cisco 代理。

/****** 来自 SSMS 的 SelectTopNRows 命令脚本 ******/

SELECT  
      [Product] 
  FROM t1 INNER JOIN t2

ON t1.Product= t2.Product
order BY Product

只会满足那些价值完全匹配的产品。但我需要查询部分匹配项

【问题讨论】:

    标签: sql sql-server-2008 inner-join contains


    【解决方案1】:

    您可以为此使用like

    SELECT t2.[Product] 
    FROM t2 LEFT JOIN
         t1
         ON t1.Product LIKE '%' + t2.Product + '%' OR
            t2.Product LIKE '%' + t1.Product + '%'
    WHERE t1.Product IS NULL
    ORDER BY t2.Product;
    

    性能不会好,所以希望你不要有太多数据。

    【讨论】:

    • 大约有 200,000 行
    • 为什么要添加“t1.product is null”?
    • 如您的问题所述,获取不匹配的行。
    【解决方案2】:

    试试这个:

    select Id, Product
    from table2 t2
    where ID Not IN ( Select IDFrom table1 )
    

    【讨论】:

      猜你喜欢
      • 2015-10-30
      • 2019-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-01
      • 2019-04-24
      • 2012-05-13
      相关资源
      最近更新 更多