SQL连接有2个条件

时间:2013-03-14 18:18:26

标签: sql database postgresql

假设我们有一个带有记录的表“页面”

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

和“类别”:

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

我需要获取属于“Nice” AND “Supper”类别的所有页面 在这种情况下,我们有1页=> TEST1。

这可以在1个SELECT中进行1次连接,还是需要次选择或第二次连接? 最好的方法是获得像

这样的结果
|PAGE_ID | PAGE.NAME| CATEGORY.NAME_1 | CATEGORY.NAME_2

然后只需用简单的地方选择正确的记录。

2 个答案:

答案 0 :(得分: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

当您需要查找超过两个类别的页面而不连续链接JOIN时,此解决方案可以正常工作。

答案 1 :(得分: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'