0

スキーマ

次の列を持つ3つのテーブルがあります。

tblClients [ClientID, ClientName, Client Contact]
tblEvents [EventID, EventName]
tblEventBook [EventBookID, EventID, ClientID]
  • tblEventBook EventID一致するtblEvents EventID
  • tblEventBook ClientID一致するtblClients ClientID

私には2つのパラメータがあります:@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

tblEvents

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

これを試して

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 に答える
1

このソリューションは、@useClientID および @useEventID に一致する関連する tblEventBook を持つすべての tblClients を除外します。

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 に答える