我有三张表,我无法改变结构:
面
id name
-----------------
1 Series
2 Material
值
id facet_id name
----------------------------------
1 2 Glass
2 2 Metal
3 1 Series #1
4 1 Series #2
5 1 Series #3
product_facet_values
product_id value_id
-----------------------------------
1 1
1 3
2 1
2 4
3 2
3 5
4 1
我正在尝试编写两个查询:
/ 1。将返回表示产品记录为Glass且具有任何系列的值表中的系列构面的ID的一个。所以像这样的输出:
id facet_id name
----------------------------------
3 1 Series #1
4 1 Series #2
/ 2。与第一个相同,但返回产品ID列表。
product_id
---------------
1
2
答案 0 :(得分:0)
第一次查询:
试试这个..我相信这会有所作为。SELECT
v.id
FROM value v
JOIN product_facet_values pfv ON pfv.value_id = v.id
WHERE pfv.product_id IN
( SELECT
product_id
FROM product_facet_values
WHERE
product_id IN
( SELECT
product_id
FROM product_facet_values
GROUP BY product_id
HAVING COUNT(*) > 1
)
AND value_id = 1
)
AND v.facet_id = 1;
第二次查询:
同一查询的内部部分返回值为1且值不为1的产品,因此它将是
SELECT
product_id
FROM product_facet_values
WHERE
product_id IN
( SELECT
product_id
FROM product_facet_values
GROUP BY product_id
HAVING COUNT(*) > 1
)
AND value_id = 1
INNERMOST SUBQUERY:
SELECT
product_id
FROM product_facet_values
GROUP BY product_id
HAVING COUNT(*) > 1
为我提供每件产品有多个记录的产品(稍后将通过' Glass''系列'过滤)
MIDDLE SUBQUERY:
SELECT
product_id
FROM product_facet_values
WHERE
product_id IN
(
INNERMOST SUBQUERY
)
AND value_id = 1
为我提供具有多个记录的value_id = 1(又名' Glass')的产品。
OUTERMOST QUERY:
SELECT
v.id
FROM value v
JOIN product_facet_values pfv ON pfv.value_id = v.id
WHERE pfv.product_id IN
(
MIDDLE SUBQUERY
)
AND v.facet_id = 1;
告诉我与Glass'相关的产品的价值ID但是他们是facet_id = 1(又名系列)