-2

私は以下のように2つのテーブルを持っています

    Table A                Table B             Table C              
  =============          ==============        =========
    Id    Name           Id   AId  CId         Id   Name 
    1     A              1    1    1           1    x
    2     B              2    1    1           2    y
    3     C              3    2    1           3    z 
    4     D              4    2    3           4    w
    5     E              5    3    2           5    v

ここで、CId=1であるテーブルBのId列CIdと一致するテーブルAのすべてのレコードが必要です。

したがって、出力は次のようになります。

Id Name CId
1   A   1 
2   B   1
3   C   1
4   D   Null
5   E   Null

誰か助けてくれませんか?

4

2 に答える 2

0

これはあなたが望むことをします:

SELECT
A.Id,
A.Name,
CASE B.CId WHEN 1 THEN 1 ELSE NULL END AS CId
FROM
A LEFT JOIN B ON A.Id = B.Id

これは LEFT JOINing に関するものではありません。INNER JOIN を使用して行うこともできます。列 CId の 3 と 2 を表示したくない場合でも、WHERE でフィルタリングする必要があるため、ID 4 と 5 の行は表示されません。これは望ましくありません。

編集:

このテスト データが与えられた場合:

create table A (Id int, Name varchar(5));
insert into A values 
(1, 'A'),
(2, 'B'),
(3, 'C'),
(4, 'D'),
(5, 'E');

create table B (Id int, AId int, CId int);
insert into B values
(1,1,1),
(2,1,1),
(3,2,1),
(4,2,3),
(5,3,2);

私のクエリはデカルト積を与えません。反対票を投じる前に読んで試してください。とにかく、あなたが達成したいことは私には明確ではありませんでした。今、私は AId 列と次のクエリに参加しました:

SELECT DISTINCT
A.Id,
A.Name
, CASE 
WHEN B.CId > 1 THEN 1 
WHEN B.CId = 1 THEN 1
ELSE NULL END AS CId
FROM
A LEFT JOIN B ON A.Id = B.AId

また、最初の前のように、正しい出力も得られます。これでもあなたが望むものではない場合、あなたのテストデータが間違っているか、私がまったく理解できません.

于 2012-06-11T10:43:44.240 に答える
-1

次のようなことを試してください:

SELECT TableA.Id, TableA.Name, TableB.CId
FROM TableA 
LEFT OUTER JOIN TableB ON TableA.Id = TableB.CId 
WHERE TableB.CId = 1 

お役に立てれば。

編集:
TableB の CId 列ではなく、TableA の ID 列を TableB の ID 列と一致させると、目的の出力を得ることができます。私が自分のPCでテストしたものの下で試してみると、必要な同様の出力が得られます。

select TableA.Id, TableA.Name, TableB.CId  
from TableA 
left outer join TableB on TableA.Id = TableB.Id 
and TableB.CId in 
(
select TableB.CId  
from TableB 
left outer join TableC on TableB.CId = TableC.Id 
WHERE TableB.CId = 1 
) 
group by TableA.Id, TableA.Name, TableB.CId  

正しいと思うかどうかお知らせください。列名を確認してください。

于 2012-06-11T10:42:26.720 に答える