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 个 SELECT 和 1 个连接中完成,还是需要子选择或第二个连接?最好的办法是得到类似的结果

|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

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

于 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 回答