0

レコードを含むテーブル「ページ」があるとしましょう

|ID    | Name |
|1     | Test1|
|2     | Test2|

および「カテゴリ」:

|PAGE_ID| ID | NAME  |
|1      |  1 | Nice  | 
|1      |  2 | Supper|
|2      |  3 | Nice  |

カテゴリ「Nice」と「Supper」に属するすべてのページを取得する必要があります。この場合、1ページ=>Test1になります。

これは、1つの結合を使用して1つのSELECTで実行できますか、それとも副選択または2番目の結合が必要ですか?次のような結果を得るのが最善です

|PAGE_ID | PAGE.NAME| CATEGORY.NAME_1 | CATEGORY.NAME_2

次に、簡単な場所で適切なレコードを取得します。

4

2 に答える 2

2

あなたはこのようにそれを行うことができます

SELECT p.ID page_id, p.Name page_name, 'Nice' Category1, 'Supper' Category2
  FROM categories c LEFT JOIN
       pages p ON c.PAGE_ID = p.ID
WHERE c.Name IN ('Nice', 'Supper')
GROUP BY p.ID, p.Name
HAVING COUNT(p.ID) = 2

出力:

| PAGE_ID | PAGE_NAME | CATEGORY1 | CATEGORY2 |
-----------------------------------------------
|       1 |     Test1 |      Nice |    Supper |

SQLFiddle

このソリューションは、を継続的にチェーンせずに2つ以上のカテゴリのページを検索する必要がある場合に正常に機能しますJOIN

于 2013-03-14T18:31:32.670 に答える
2
select
    c1.page_id, p.name, c1.name, c2.name
from
    pages p
    inner join
    categories c1 on p.id = c1.page_id
    inner join
    categories c2 on p.id = c2.page_id
where
    c1.name = 'Nice' and c2.name = 'Supper'
于 2013-03-14T18:33:15.633 に答える