假设我们有一个带有记录的表“页面”
|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
然后只需用简单的地方选择正确的记录。
答案 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'