SQL 不同的左连接



我有一个问题,我试图从我的主表中找到一个不同的值,其中 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 具有"某些文本"以外的其他变量值。

由于 t2.desc 是文本并且没有可比

性,因此不同不起作用。我已经浏览了其他几个看似相似的问题,但找不到符合我标准的问题。

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

谢谢

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

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

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

所以在上面的例子中,我想看一次1811352,因为它不包含 t2。[描述]"一些文字">

如果您需要仅基于 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

您不应该使用TEXT数据类型,它很久以前就已被弃用。相反,您应该使用VARCHAR(MAX)

快速解决 当您无法将其更改为VARCHAR(MAX)时,您可以将其CASTVARCHAR(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' 

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

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

非常感谢回复。

谢谢

最新更新