0

架构

我有 3 个包含以下列的表:

tblClients [ClientID, ClientName, Client Contact]
tblEvents [EventID, EventName]
tblEventBook [EventBookID, EventID, ClientID]
  • tblEventBook EventID火柴tblEvents EventID
  • tblEventBook ClientID火柴tblClients ClientID

我有两个参数:@useEventID@useClientID

我想检索不等于和tblClient的所有行。tblEventBookuseEventIDuseClientID

我尝试使用以下内容,但它不起作用:

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

tbl事件

EventID EventName
1       TestEventA
2       TestEventB
3       TestEventC
4       TestEventD
5       TestEventE

所需结果

我使用时需要得到以下结果:

  1. @useClientID = 1, @useEventID = 1

    它应该返回ClientID 2

  2. @useClientID = 2, @useEventID = 1

    它应该返回ClientID 1 and 2

  3. @useClientID = 2, @useEventID = 2

    它应该返回ClientID 1

  4. @useClientID = 5, @useEventID = 2

    它应该返回ClientID 1 and 2

4

5 回答 5

1

我不是 100% 确定你想在这里做什么,但试试这个:

SELECT * FROM tblEventBook

WHERE 

EventID <> @useEventID 

AND

ClientID <> @useClientID
于 2012-04-22T04:22:25.420 回答
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;
于 2012-04-22T04:22:32.487 回答
1

如果我正确理解您的要求:

SELECT        *
FROM           tblClients
WHERE        (ClientID IN
                             (SELECT        ClientID
                               FROM            tblEventBook
                               WHERE        (ClientID <> @useClientID) AND (EventID <> @useEventID)))
于 2012-04-22T04:25:53.390 回答
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
)
于 2012-04-22T04:33:49.613 回答
1

试试这个

select *
from  @tblClients c
join @tblEventBook eb
on c.ClientID = eb.ClientID
where c.ClientID != @useClientID
and eb.EventBookID != @useEventID
于 2012-04-22T04:43:54.817 回答