我有一个问题,我试图从我的主表中找到一个不同的值,其中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具有除“some text”之外的其他变量值。
由于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”
如果您需要的是仅基于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')
真的很感激回应。
谢谢