MySQL - 查找具有子值的结果

时间:2016-11-21 20:38:33

标签: mysql sql

我有这个表结构:

product_skus表

| id |
| 1  | 
...

product_sku_values表

| product_sku_id | value_id |
| 1              | 1        |
| 1              | 2        |
| 1              | 3        |
...

我需要查询才能找到product_sku_id,其中包含三个值ID(123)。

我正在尝试使用此查询:

select product_sku_id from product_sku_values
    where product_sku_values.value_id = 1
    or    product_sku_values.value_id = 2
    or    product_sku_values.value_id = 3
    group by product_sku_id
    having product_sku_id = 1

我该怎么做?我正在尝试很多可能性,但没有人给我我需要的ID。有人可以帮帮我吗?

感谢。

2 个答案:

答案 0 :(得分:2)

这是一种规范方法:

select psv.product_sku_id
from product_sku_values psv
where psv.value_id in (1, 2, 3)
group by psv.product_sku_id
having count(distinct psv.value_id) = 3;

如果您知道product_sku_values没有重复项,请在count(*)子句中使用having

答案 1 :(得分:0)

您只需使用group by子句获取所有可能的值,例如:

select product_sku_id, group_concat(value_id) 
from product_sku_values
group by product_sku_id;

如果您只对value_id 1,2和3感兴趣,那么您可以添加一个where子句,例如:

select product_sku_id, group_concat(value_id)
from product_sku_values
where value_id in (1,2,3)
group by product_sku_id;