我正在努力创造一个简单的WHERE NOT EXISTS条款。假设以下示例
CREATE TABLE #TempUser ( TempUserId INT, TempUserName VARCHAR(50) )
CREATE TABLE #TempData ( TempDataId INT, TempDesc VARCHAR(50) )
CREATE TABLE #TempUserData ( TempUserId INT, TempDataId INT )
INSERT #TempUser ( TempUserId, TempUserName )
VALUES ( 1, 'Paul' ),
( 2, 'Franics' ),
( 3, 'Raj' )
INSERT #TempData ( TempDataId, TempDesc )
VALUES ( 1, 'Test Exists'),
( 2, 'Test Not Exists')
INSERT #TempUserData ( TempUserId, TempDataId )
VALUES ( 1, 1 ),
( 1, 2 ),
( 2, 1 )
SELECT TU.TempUserId
FROM
#TempUser AS TU
LEFT JOIN #TempUserData AS TUD ON TUD.TempUserId = TU.TempUserId
WHERE
NOT EXISTS (SELECT * FROM #TempData AS TD WHERE TD.TempDataId = TUD.TempDataId AND TD.TempDesc LIKE '%Not%')
我要做的就是从#TempUser表中获取没有特定数据记录的用户列表,在这种情况下 测试不存在 。预期的结果集是UserId 2和3,因为你可以看到执行上面的操作会得到1,2和3.所以那里的任何人都可以帮助我吗?
答案 0 :(得分:0)
我认为这就是你想要的:
select TU.TempUserId
from #TempUser as TU
where not exists (
select 1
from #TempData as TD
inner join #TempUserData as TUD
on TD.TempDataId = TUD.TempDataId
where TUD.TempUserId = TU.TempUserId
and TD.TempDesc like '%Not%'
)
rextester演示:http://rextester.com/JJDTM34255
返回:
+------------+
| TempUserId |
+------------+
| 2 |
| 3 |
+------------+
答案 1 :(得分:0)
我希望这样的事情:
2017-06-16 08:00:25 +0000
我怀疑您的问题是用户1的第一行(SELECT TU.TempUserId
FROM #TempUser TU
WHERE NOT EXISTS (SELECT 1
FROM #TempUserData TUD JOIN
#TempData TD
ON TD.TempDataId = TUD.TempDataId
WHERE TUD.TempUserId = TU.TempUserId AND
D.TempDesc LIKE '%Not%'
);
的第一行)符合TempDataId = 1
条件。
答案 2 :(得分:0)
稍微修改现有查询,再添加一个left join
和聚合。
SELECT TU.TempUserId
FROM #TempUser AS TU
LEFT JOIN #TempUserData AS TUD ON TUD.TempUserId = TU.TempUserId
LEFT JOIN #TempData AS TD ON TD.TempDataId = TUD.TempDataId AND TD.TempDesc LIKE '%Not%'
GROUP BY TU.TempUserId
HAVING COUNT(TD.TempDesc) = 0