0

こんにちは、データと 2 つの小さな質問を含むテーブル構造があります。

CREATE TABLE [dbo].[Parent] (
    [id] [int] NOT NULL,
    [Name] [nvarchar](50) NOT NULL, 
 CONSTRAINT [PK_Parent] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

CREATE TABLE [dbo].[Child1] (
    [Child1Id] [int] NOT NULL,
    [ParentId] [int] NOT NULL,
    [SomeData] [int] NOT NULL,  
 CONSTRAINT [PK_Child1] PRIMARY KEY CLUSTERED 
(
    [Child1Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

CREATE TABLE [dbo].[Child2] (
    [Child2Id] [int] NOT NULL,
    [ParentId] [int] NOT NULL,
    [SomeData] [int] NOT NULL,  
 CONSTRAINT [PK_Child2] PRIMARY KEY CLUSTERED 
(
    [Child2Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]


INSERT INTO Parent VALUES(1,'Name 1')
INSERT INTO Parent VALUES(2,'Name 2')
INSERT INTO Parent VALUES(3,'Name 3')
INSERT INTO Parent VALUES(4,'Name 4')


INSERT INTO [Child1] VALUES(1,1,50)
INSERT INTO [Child1] VALUES(2,1,125)
INSERT INTO [Child1] VALUES(3,2,255)


INSERT INTO [Child2] VALUES(1,1,2)
INSERT INTO [Child2] VALUES(2,2,4)
INSERT INTO [Child2] VALUES(3,2,8)
INSERT INTO [Child2] VALUES(4,3,16)
  1. 両方のテーブルで少なくとも 1 つの子タイプを持つすべてのペアレコードを選択する方法。次のクエリを実行しましたが、このレコードの合計数を表示する最適な方法がわかりません

    SELECT p.Name, count(Child1) , count(Child2)

  2. 両方のテーブルに存在するすべての parets レコードのみを選択するにはどうすればよいですか? SELECT p.Name, count(Child1) , count(Child2)

アドバイスありがとう。

4

1 に答える 1

2

クエリ 1:

--at least one child record in either Child1 or Child2
select distinct p.*
from parent p
left outer join child1 c1 on p.id = c1.ParentId
left outer join child2 c2 on p.id = c2.ParentId
where coalesce(c1.ParentId, c2.ParentId) is not null

クエリ 2:

--at least one child record in both Child1 and Child2
select distinct p.*
from parent p
inner join child1 c1 on p.id = c1.ParentId
inner join child2 c2 on p.id = c2.ParentId

注: 親レコードの数を表示するだけの場合は、

select distinct p.*

select count(distinct p.id)

どちらのクエリでも。

于 2012-05-10T15:52:50.833 に答える