简体   繁体   English

MySQL左连接条件相同的列

[英]MySQL Left Join With And Condition To Same Column

I have tables like this: 我有这样的表:

tbl_product
===========
product_id (PK)

tbl_product_attribute
=====================
pro_attr_id (PK)
pro_attr_pro_id (FK to tbl_product)
pro_attr_attr_opt_id(FK to tbl_attribute_option)

Now, I would like query Products which have 2 attributes in the tbl_product_attribute . 现在,我想查询在tbl_product_attribute具有2个属性的tbl_product_attribute

Example like : 像这样的例子:

SELECT "p".* 
FROM "tbl_omx_product" "p" 
LEFT JOIN "tbl_omx_product_attribute" "proAttr" ON "proAttr".pro_attr_pro_id = p.product_id 
WHERE 
    (pro_attr_attr_opt_id LIKE '%1759%' ) AND 
    (pro_attr_attr_opt_id LIKE '%1776%' )
GROUP BY "p"."product_id";

So I'd like to get Products that has exactly 2 values at tbl_omx_product_attribute , which is 1759 & 1776. 所以我想在tbl_omx_product_attribute处获得正好具有2个值的tbl_omx_product_attribute ,分别是1759和1776。

But query like above won't show any result unless I use relation OR instead of AND . 但是,除非我使用关系OR而不是AND否则上述查询不会显示任何结果。

The question what is the query to retrieve Products that have 2 values at the tbl_product_attribute ? 问题是什么查询来检索tbl_product_attribute处具有2个值的产品? thank you 谢谢

To get products which have two attributes: 要获得具有两个属性的产品:

SELECT p.* 
FROM tbl_omx_product p 
LEFT JOIN tbl_omx_product_attribute proAttr ON proAttr.pro_attr_pro_id = p.product_id 
GROUP BY p.product_id
having count(*)=2;

You can filter data as per your required output by just adding where clause. 您只需添加where子句即可根据所需的输出过滤数据。

Maybe I misunderstood you, but if you want the product to have both attribute options you can query: 也许我误会了您,但是如果您希望该产品同时具有两个属性选项,则可以查询:

SELECT "p".* 
    FROM "tbl_omx_product" "p" 
    JOIN "tbl_omx_product_attribute" "proAttr1" 
        ON "proAttr1".pro_attr_pro_id = p.product_id 
            AND "proAttr1".pro_attr_attr_opt_id LIKE '%1759%'
    JOIN "tbl_omx_product_attribute" "proAttr2" 
        ON "proAttr2".pro_attr_pro_id = p.product_id 
             AND "proAttr2".pro_attr_attr_opt_id LIKE '%1776%'

You can try this: 您可以尝试以下方法:

SELECT p.* 
FROM tbl_omx_product AS p 
LEFT JOIN  tbl_omx_product_attribute AS proAttr ON  p.product_id = proAttr.pro_attr_pro_id
WHERE 
    (pro_attr_attr_opt_id LIKE '%1759%' ) AND 
    (pro_attr_attr_opt_id LIKE '%1776%' )
GROUP BY p.product_id;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM