【发布时间】:2019-03-31 13:07:01
【问题描述】:
我有一个有效的 SQL 查询:
SELECT table1.bike_id
FROM
(
SELECT bike_id
FROM `bike_filters`
WHERE (`bike_category_id` in (416,11111))
) as table1
RIGHT JOIN (
SELECT bike_id
FROM `bike_filters`
WHERE (`bike_category_id` in (5555,779))
) as table2 ON table1.bike_id = table2.bike_id
GROUP BY bike_id
但我需要添加更多 RIGHT JOINs 行,可能是 5 行或更多。如何以正确的方式形成查询?我在同一张表中搜索,但在一个查询中加入多条记录以获得适合所有条件的bike_id。
这个查询的目的是获取bike_ids,它包含查询的所有参数——bike 可以有 20 个过滤器,但如果用户搜索 5 个并且bike 匹配它们,我们通过这个查询得到bike_id。
表结构:
| id | bike_id | bike_category_id |
| 1 | 3 | 416 |
| 2 | 3 | 779 |
| 3 | 3 | 344 |
| 4 | 3 | 332 |
| 5 | 4 | 444 |
| 5 | 5 | 555 |
我需要这样的东西,这个不正确:
SELECT table1.bike_id
FROM
(
SELECT bike_id
FROM `bike_filters`
WHERE (`bike_category_id` IN (416,11111))
) AS table1
RIGHT JOIN (
SELECT bike_id
FROM `bike_filters`
WHERE (`bike_category_id` IN (5555,779))
) AS table2
RIGHT JOIN (
SELECT bike_id
FROM `bike_filters`
WHERE (`bike_category_id` IN (5555,344))
) AS table3
RIGHT JOIN (
SELECT bike_id
FROM `bike_filters`
WHERE (`bike_category_id` IN (5555,332))
) AS table4
GROUP BY bike_id
【问题讨论】:
-
你说“但是如果用户搜索 5 并且 bike 匹配他们,我们通过这个查询得到 bike_id”。匹配其中 1 个或全部 5 个?
-
@JimCastro 匹配所有五个!
标签: mysql sql database group-by subquery