2017-03-21 15 views
-2

SQL ServerでJOINを使用して2つのテーブルからフルレコードを取得できません。SQL Server 2008 R2の2つのテーブルからフルレコードを取得する方法

私はID=1

が、私はテーブルBlog & Categoryを持って、両方のテーブルからの完全な詳細を必要としています。

Blogテーブル:

ID BlogTitle  CatID  Public 
-------------------------------------- 
1 Title One  10   1 
2 Title Two  0   1 
3 Title Three  NULL  1 

Categoryテーブル:

:このクエリから

CatID CatName 
-------------------- 
10  Category One 
20  Category Two 

クエリ

SELECT 
    ID, BlogTitle, c.CatID, CatName 
FROM 
    Blog b 
FULL OUTER JOIN 
    Category C ON b.CatID = c.CatID 
WHERE 
    Public = 1 AND ID = 1 

、私は次のような結果を得ます

私は、次のような結果

ID BlogTitle  CatID  CatName 
---------------------------------------------- 
1 Title One  10   Category One 

を期待していますが、私はいくつかのことを試してみましたが、私は私が間違っているのかわからないです。

+0

:CATIDのデータ型は、両方のテーブルに同じですか?あなたは確かです、あなたは希望のレコード(この場合は10スペースと印刷できない文字なしで10)の同じ値を格納している?左テーブルに定数フィルタがある場合は、完全結合は必要ありません。すべてのNULLを除いてその値だけに結果が縮小されるからです。 – Pred

+0

SELECT ID、BlogTitle、c.CatID、CatNameの出力を貼り付けてください。 FROM Blog b FULL OUTER JOINカテゴリC ON b.CatID = c.CatID WHERE Public = 1 – ProgrammerBoy

+0

@Pred、はい両方のCatIDが 'Int'です両方のテーブルに入力します。なぜこれが私にそんなに多くの頭を与えているのかわからない。私は両方のテーブルレコードにクロスチェックされたレコードがある。 – Learning

答えて

1
外側得るために ONWHEREから条件を移動

結果参加:あなたのwhere文でID = 1を持っており、この条件に合致するレコードは1つだけあり

SELECT ID, BlogTitle, c.CatID, CatName 
FROM Blog b 
FULL OUTER JOIN Category C 
    ON b.CatID = c.CatID 
    AND Public = 1 AND ID = 1 
+0

id = 1のレコードを1つだけ取得する必要があります。 – Learning

+0

id = 1のレコードが1つだけであることを意味しますか? – jarlh

+0

私のケースIDにid = 1のレコードを取得したいのですが、実際にはプライマリキーなので、常に1つのレコードが存在します。 – Learning

0

を。これはあなたがすべてのレコードを取得していない理由です。

whereに条件を入れるのではなく、これを試してください。ON節に入れてください。同様

SELECT ID, BlogTitle, c.CatID, CatName FROM Blog b FULL OUTER JOIN Category C ON (b.CatID = c.CatID and Public = 1 AND ID = 1)

+0

私はid = 1のレコードしか必要ない – Learning

+0

ID = 1のレコードだけが必要な場合は、投稿からカテゴリへの左結合はなぜできませんか? – Pred

+0

Letf joingは、左テーブルからsrecordのみを持ち、右テーブルではnullを表示します。 – Learning

0
Use JOIN to get your result : 

    CREATE TABLE #table (ID INT , BlogTitle VARCHAR(100) , CatID INT , 
    _Public INT) 
    CREATE TABLE #table1 (CatID INT , CatName VARCHAR(100)) 

    INSERT INTO #table1 (CatID , CatName) 
    SELECT 10,'Category One' UNION ALL 
    SELECT 20,'Category Two' 

    INSERT INTO #table (ID , BlogTitle , CatID , _Public ) 
    SELECT 1,'Title One',10,1 UNION ALL 
    SELECT 2,'Title Two',0,1 UNION ALL 
    SELECT 3,'Title Three',NULL,1 

    SELECT ID, BlogTitle , #table.CatID ,  CatName 
    FROM #table 
    JOIN #table1 ON #table.CatID = #table1.CatID 
    WHERE Id = 1 
+0

@Learning、上記の質問をお試しください。 – Mansoor

+0

これは、すべてのレコードを取得します。WHERE条件を満たすレコードのみが必要です。「ID = 1」 – Learning

+0

これは、左側の表からデータを取得します。CategoryName&CatID – Learning

2

試し:ちょうどダブルチェックに

SELECT Blog.ID, Blog.BlogTitle, Blog.CatID, Category.CatName 
FROM Blog 
INNER JOIN Category 
ON Blog.CatID = Category.CatID 
WHERE 
Blog.ID = 1 
AND 
Blog.Public = 1 
+0

これは何も得られません – Learning

+0

@学習 - これは何も得られません。質問のテーブルとサンプルデータのデータは同じですか? –

+0

Boy(@Learning)、内部結合クエリから何も取得していない場合は、テーブルに結合できる一致するレコードがありません。あなたがCatID = 10のBlogからselect *からレコードを取得したかどうか確認してください。 select * from Category CatID = 10 – ProgrammerBoy

0
SELECT B.ID,B.BlogTitle,C.CatID, C.CatName FROM 
(SELECT ID, BlogTitle,CatID FROM Blog WHERE Public = 1 AND ID = 1) B 
FULL OUTER JOIN Category C 
    ON b.CatID = c.CatID 
関連する問題