0

サブクエリに関する以前の質問で私に与えられた提案を使用しています。ここを参照してください:

sql - 複数層の相関サブクエリ

SQL Server : 左の結合により、左のテーブルよりも行数が少なくなります

ms sqlサーバーを使用しています(2005年だと思います)。

私が今やろうとしていることは次のとおりです。

行の結果(結果Aと呼びます)があります。これは、次のことから得られます。

select * from TableA as a
join (select * from TableB where RealDate = '4/20/2013 12:00:00 AM') as b
on a.id = b.id

この結果のうち、このクエリによって返された行の結果に含まれていないすべての行を見つけたい:

select * from TableA as a
join TableC as c
on c.id = a.id

基本的に、最初のクエリの結果が 246 レコードになり、2 番目のクエリの結果が 247 レコードになる状況があります。最初の結果で 247 レコードが返されることを期待していました (そのすべてが、2 番目のクエリによって返されるレコードのリストに含まれている必要があります)。そのため、適切なアクションを実行できるように、どのレコードが欠落しているかを調査する必要があります。

次のようなことをしようとしましたが、さまざまなエラーが発生しました。

select * from (select * from TableA as a
join (select * from TableB where RealDate = '4/20/2013 12:00:00 AM') as b
on a.ul_id = b.id))
as result_A
where not exists (select 1 from (select * from TableA as a
                  join TableC as c
                  on c.id = a.ul_id) as result_B
                  where result_A.ul_id = result_B.id);
4

2 に答える 2

2

この設定差を行います。

select a.* from TableA as a
join TableC as c
on c.id = a.id

except

select a.* from TableA as a
join (select * from TableB where RealDate = '4/20/2013 12:00:00 AM') as b
on a.id = b.id

何らかの理由でこれが行を返さない場合、最初のクエリには重複があります。

于 2013-04-20T20:56:59.810 に答える
1

あなたの説明では、次の結果を除外したいと言っています。

select * from TableA as a
join TableC as c
on c.id = a.id

しかし、存在しないには別のサブクエリがあります。また、エラーの一部は、同じエイリアスを複数回使用したことが原因である可能性があります。

最後に、Pieter のアプローチが機能するはずです。詳細は確認していません。

于 2013-04-20T21:00:06.543 に答える