我有一个问题,我正在尝试从主表中找到一个不同的值,其中t2中不同列的文本值不存在。 E.G。
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”
答案 0 :(得分:0)
如果您需要的是仅基于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
答案 1 :(得分:0)
您不应该使用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'
答案 2 :(得分:0)
我想我最终得到的是以下内容:
SELECT t1.val
FROM t1
WHERE NOT EXISTS
(SELECT t2.[desc] FROM t2 WHERE t1.val = t2.val
And t2.[desc] LIKE 'some text')
真的很感激回应。
由于