我有一个问题,我试图从我的主表中找到一个不同的值,其中 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)
时,您可以将其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'
我想我最终得到了我想要的东西:
SELECT t1.val
FROM t1
WHERE NOT EXISTS
(SELECT t2.[desc] FROM t2 WHERE t1.val = t2.val
And t2.[desc] LIKE 'some text')
非常感谢回复。
谢谢