SQL Q&A

 

OUTER JOIN と TOP10との組み合わせ

テーブルAと LEFT OUTER JOIN するテーブルBがあり、
単にLEFT OUTER JOINすると、
レコードA01 レコードB01
レコードA01 レコードB02
レコードA01 レコードB03

のようにレコードBに対し、該当する同じレコードAが複数取得されます。

この状態でTOP10をかけると、テーブルAのTOP10が欲しいのに、
テーブルBも混じった数で取得されてしまいます。
(テーブルAは10レコード取得できない)

これをテーブルAのTOP10を取得して、それにJOINするテーブルBの数は問わない方法は可能でしょうか?
このエントリーをはてなブックマークに追加
2014-03-10 11:57:04   1427

コメント

2014年 03月 10日 (12:37)
こんにちは。
イノ(inno)です。

下記のSQLを参考してみてください。
下記のSQLはTOP 5でしたのもですのでご参考ください。

-- テーブル作成
CREATE TABLE dbo.TempA
(
Data1 varchar(10)
, Data2 varchar(10)
)

CREATE TABLE dbo.TempB
(
Data1 varchar(10)
, Data2 varchar(10)
)


-- #### TempA テーブルにデータ登録
INSERT INTO dbo.TempA (Data1, Data2) VALUES ('A','AA1')
INSERT INTO dbo.TempA (Data1, Data2) VALUES ('B','AB1')
INSERT INTO dbo.TempA (Data1, Data2) VALUES ('C','AC1')
INSERT INTO dbo.TempA (Data1, Data2) VALUES ('D','AD1')
INSERT INTO dbo.TempA (Data1, Data2) VALUES ('E','AE1')
INSERT INTO dbo.TempA (Data1, Data2) VALUES ('F','AF1')
INSERT INTO dbo.TempA (Data1, Data2) VALUES ('G','AG1')

-- #### TempB テーブルにデータ登録
INSERT INTO dbo.TempB (Data1, Data2) VALUES ('A','BA1')
INSERT INTO dbo.TempB (Data1, Data2) VALUES ('A','BA2')
INSERT INTO dbo.TempB (Data1, Data2) VALUES ('A','BA3')
INSERT INTO dbo.TempB (Data1, Data2) VALUES ('B','BB1')
INSERT INTO dbo.TempB (Data1, Data2) VALUES ('B','BB2')
INSERT INTO dbo.TempB (Data1, Data2) VALUES ('C','BC1')
INSERT INTO dbo.TempB (Data1, Data2) VALUES ('C','BC2')
INSERT INTO dbo.TempB (Data1, Data2) VALUES ('C','BC3')
INSERT INTO dbo.TempB (Data1, Data2) VALUES ('C','BC4')
INSERT INTO dbo.TempB (Data1, Data2) VALUES ('D','BD1')
INSERT INTO dbo.TempB (Data1, Data2) VALUES ('D','BD2')
INSERT INTO dbo.TempB (Data1, Data2) VALUES ('E','BE1')
INSERT INTO dbo.TempB (Data1, Data2) VALUES ('F','BF1')
INSERT INTO dbo.TempB (Data1, Data2) VALUES ('G','BG1')
INSERT INTO dbo.TempB (Data1, Data2) VALUES ('G','BG2')


-- #### 実行
SELECT *
FROM
( SELECT TOP 5 Data1, Data2
FROM dbo.TempA
ORDER BY Data1 ASC
) AS A LEFT OUTER JOIN dbo.TempB AS B
ON A.Data1 = B.Data1

-- #### 実行結果
Data1 Data2 Data1 Data2
A AA1 A BA1
A AA1 A BA2
A AA1 A BA3
B AB1 B BB1
B AB1 B BB2
C AC1 C BC1
C AC1 C BC2
C AC1 C BC3
C AC1 C BC4
D AD1 D BD1
D AD1 D BD2
E AE1 E BE1

SQL Server で 翌月10日を取得する方法を教えてください。  (1)

-.日付:2014-03-31   カテゴリ : -   閲覧数:1452

一時テーブルが存在するかチェックする方法を教えてください。  (1)

-.日付:2014-03-13   カテゴリ : -   閲覧数:1394

変数の使い方について質問です。  (5)

-.日付:2014-03-12   カテゴリ : -   閲覧数:1399

OUTER JOIN と TOP10との組み合わせ  (1)

-.日付:2014-03-10   カテゴリ : -   閲覧数:1427

ORDER BYについて質問です。  (2)

-.日付:2014-03-03   カテゴリ : -   閲覧数:1431

各テーブルのカウントを出力するSQL文を作成したいのですが  (2)

-.日付:2014-02-27   カテゴリ : -   閲覧数:1474

SQL SERVER 2008 で日付型のフォーマット設定を教えてください。  (2)

-.日付:2014-02-25   カテゴリ : -   閲覧数:1423

Copyright © 2015 INNOYA.COM All rights reserved. RSS