如何选择与“匹配”的行;“多行条件”;在mysql中

如何选择与“匹配”的行;“多行条件”;在mysql中,mysql,sql,subquery,Mysql,Sql,Subquery,因此,我创建了一个sql FIDLE来更清楚地解释我的问题: 如你所见,我有3个表,其中1个表链接了其他2个表 table name: tags --------------------- id | tag | value --------------------- 1 | color | green 2 | color | yellow 3 | color | red 4 | category | dress 5 | category | car ta

因此,我创建了一个sql FIDLE来更清楚地解释我的问题:

如你所见,我有3个表,其中1个表链接了其他2个表

table name: tags
---------------------
id | tag      | value
---------------------
1  | color    | green
2  | color    | yellow
3  | color    | red
4  | category | dress
5  | category | car

table name: product_tags_link
---------------------
product_id | tag_id
---------------------
1          | 1
1          | 5
2          | 1
3          | 2
3          | 5
4          | 4
5          | 4
5          | 1

table name: products
---------------------
id  | name
---------------------
1   | green car
2   | yellow only
3   | yellow car
4   | dress only
5   | green dress
如果我能得到任何有“颜色”“绿色”和“类别”“汽车”的产品,我怎么能做到这一点

我试着做:

select `ptl`.`product_id` 
from `product_tags_link` as `ptl`
    inner join `tags` on `tags`.`id` = `ptl`.`tag_id`
where ((`tags`.`tag` = "green") or (`tags`.`value` = "car"))
但它会退回其他绿色或汽车产品。将其更改为
也不会返回任何内容


我希望收到is
product\u id:1
,它既有
颜色:绿色
又有
类别:汽车

加入所有3个表,按产品分组,并在HAVING子句中设置条件:

select p.id, p.name 
from products p
inner join product_tags_link l on l.product_id = p.id
inner join tags t on t.id = l.tag_id
where (t.tag = 'category' and t.value = 'car')
   or (t.tag = 'color' and t.value = 'green')
group by p.id, p.name
having count(distinct t.tag) = 2
或:

请参阅。
结果:


连接所有3个表,按产品分组,并在HAVING子句中设置条件:

select p.id, p.name 
from products p
inner join product_tags_link l on l.product_id = p.id
inner join tags t on t.id = l.tag_id
where (t.tag = 'category' and t.value = 'car')
   or (t.tag = 'color' and t.value = 'green')
group by p.id, p.name
having count(distinct t.tag) = 2
或:

请参阅。
结果:


我将省略联接表,并按如下方式进行简单联接:

SELECT 
    p.id AS product_id
FROM
    products p
        LEFT JOIN
    tags t ON p.id = t.id
WHERE
    t.value = 'green'
        AND p.name LIKE '%car%'

我将省略联接表,并按如下方式进行简单联接:

SELECT 
    p.id AS product_id
FROM
    products p
        LEFT JOIN
    tags t ON p.id = t.id
WHERE
    t.value = 'green'
        AND p.name LIKE '%car%'

您是否可以按照希望的结果进行更新?您是否可以按照希望的结果进行更新?很抱歉,这将不起作用。通过在“%car%”中包含通配符(请参见上面的解决方案),它将为我返回一个结果。尝试一下。很抱歉,这不起作用。通过在“%car%”中包含通配符(请参见上面的解决方案),它会为我返回一个结果。试试看。