【问题标题】:SQL Distinct Left JoinSQL 不同的左连接
【发布时间】:2018-03-06 11:18:05
【问题描述】:

我有一个问题,我试图从我的主表中找到一个不同的值,其中 t2 中不同列的文本值不存在。例如

   SELECT t1.val, t2.desc
     FROM t1 
LEFT JOIN t2 
       On t1.val = t2.val
      And t2.desc NOT LIKE 'some text' 

我遇到的问题是我正在检索 t1.val 的重复值,因为 t2.desc 具有除“某些文本”之外的其他变量值。

Distinct 不起作用,因为 t2.desc 是文本且不可比较。

我浏览了其他几个看起来相似但找不到符合我标准的问题。

我整个上午都在努力让这个工作,并且非常感谢帮助从 t1 获取不同的值。

谢谢

尝试了这些建议后,我仍然在输出中看到 t1.val 的倍数

  t1.Val  t2.[desc]
  1811352  Process
  1811352  Conversion
  1811352  State
  1811352  Test
  1811352  Work

我正在寻找的所需输出是单个 t1.val,其中 t2.[desc] 中没有特定文本的值。因此试图获得一个独特的 t1.val,其中 t2.[desc] 特定文本不会出现在 t2.[desc] 的任何位置。

所以在上面的示例中,我希望看到 1811352 一次,因为它不包含 t2.[desc] "some text"

【问题讨论】:

  • 为什么要使用左连接?内连接可以提供帮助
  • 编辑您的问题以显示一些示例数据、您获得的输出以及您想要的输出将大大有助于获得更多帮助。此页面可能有助于格式化您的数据。 ozh.github.io/ascii-tables

标签: sql-server left-join


【解决方案1】:

如果您需要仅基于 Val 进行区分,请尝试此

;WITH CTE
AS
(
    SELECT 
       RN = ROW_NUMBER() OVER(PARTITION BY t1.val ORDER BY t1.val),
       t1.val,
       t2.[desc]
       FROM t1
          LEFT JOIN t2 
             ON t1.val = t2.val
                AND t2.[desc] NOT LIKE 'some text'
)
SELECT
    val,
    [desc]
    FROM CTE
       WHERE RN = 1

【讨论】:

    【解决方案2】:

    您不应该使用TEXT 数据类型,它早就被弃用了。而不是这个你应该使用VARCHAR(MAX)

    当您无法将其更改为VARCHAR(MAX) 时,您可以将其CAST 更改为VARCHAR(MAX) 并应用DISTINCT。

    SELECT DISTINCT t1.val, CAST(t2.[desc] AS VARCHAR(MAX))
    FROM t1 
    LEFT JOIN t2 on t1.val = t2.val
    AND t2.[desc] NOT LIKE 'some text' 
    

    【讨论】:

    • 感谢您提供详细信息,我进行了更新,现在我假设我得到了 t2.[Desc] 的不同行,因为输出显示来自 t1.val 的多个?
    • 您是否只希望出现一个 t2.Desc,如果是,是哪一个,标准是什么?请在问题中也添加所需的输出。这会有所帮助
    【解决方案3】:

    我想我最终得到了我想要的东西:

    SELECT t1.val
         FROM t1 
    WHERE NOT EXISTS
        (SELECT t2.[desc] FROM t2 WHERE t1.val = t2.val
          And t2.[desc] LIKE 'some text')
    

    非常感谢您的回复。

    谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-24
      • 2016-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-24
      相关资源
      最近更新 更多