模式
我有3个表格,其中包含以下列:
tblClients [ClientID, ClientName, Client Contact]
tblEvents [EventID, EventName]
tblEventBook [EventBookID, EventID, ClientID]
tblEventBook EventID
匹配tblEvents EventID
tblEventBook ClientID
匹配tblClients ClientID
我有两个参数:@useEventID
和@useClientID
我想检索tblClient
tblEventBook
不等于useEventID
和useClientID
的所有行。
我尝试使用以下内容,但它不起作用:
SELECT *
FROM tblClients
WHERE tblEventBook.EventID <> @useEventID
AND tblEventBook.ClientID <> @useClientID
示例数据:
tblEventBook
EventBookID EventID ClientID
1 1 1
2 2 2
3 3 1
4 4 2
tblClients
ClientID ClientName ClientContact
1 TestNameA 12345
2 TestNameB 54321
tblEvents
EventID EventName
1 TestEventA
2 TestEventB
3 TestEventC
4 TestEventD
5 TestEventE
必填结果
我使用时需要获得以下结果:
@useClientID = 1, @useEventID = 1
应该返回ClientID 2
@useClientID = 2, @useEventID = 1
应该返回ClientID 1 and 2
@useClientID = 2, @useEventID = 2
应该返回ClientID 1
@useClientID = 5, @useEventID = 2
应该返回ClientID 1 and 2
答案 0 :(得分:1)
我不是100%肯定你在这里想做什么,但试试这个:
SELECT * FROM tblEventBook
WHERE
EventID <> @useEventID
AND
ClientID <> @useClientID
答案 1 :(得分:1)
如果没有一些样本数据和期望的结果,确切地确定你所追求的是什么,但这是我对你的单词问题的第一次猜测:
SELECT c.ClientID, c.ClientName, c.[Client Contact],
e.EventID, e.EventName,
eb.EventBookID
FROM dbo.tblClients AS c
LEFT OUTER JOIN dbo.tblEventBook AS eb
ON c.ClientID = eb.ClientID
LEFT OUTER JOIN dbo.tblEvents AS e
ON eb.EventID = e.EventID
WHERE eb.EventID <> @useEventID
AND eb.ClientID <> @useClientID;
答案 2 :(得分:1)
如果我理解你的要求:
SELECT *
FROM tblClients
WHERE (ClientID IN
(SELECT ClientID
FROM tblEventBook
WHERE (ClientID <> @useClientID) AND (EventID <> @useEventID)))
答案 3 :(得分:1)
此解决方案将排除所有与@useClientID相关的tblClients以及与@useEventID匹配的相关tblEventBook:
select * from tblClients c
where c.ClientID <> @useClientID
and not exists(select 1 from tblEventBook where ClientID=c.ClientID and EventID=@useEventID)
但是根据你的描述我也看到了一个略有不同的可能性,如果存在一个有@useClientID和@useEventID的相关tblEventBook记录,我们只排除tblClients:
select * from tblClients c
where not exists(
select 1 from tblEventBook
where ClientID=c.ClientID
and EventID=@useEventID
and ClientID=@useClientID
)
答案 4 :(得分:1)
试试这个
select *
from @tblClients c
join @tblEventBook eb
on c.ClientID = eb.ClientID
where c.ClientID != @useClientID
and eb.EventBookID != @useEventID