简体   繁体   中英

Join many to many table with others

I have a query that joins 3 tables on product id, here is the code.

SELECT oc_product.product_id, oc_product.image, oc_product.price, oc_product_description.name
FROM oc_product
JOIN oc_product_description
ON oc_product.product_id = oc_product_description.product_id;

I get the product_id, image, price and description, but I need to take the category name too, the product is in a many to many relationships with category table. Looks like this.

[oc_product_to_category * pivot table][1]

And I need to take category name from this table.

[oc_category_description][2]

[1] https://i.stack.imgur.com/5WAKd.png

[2] https://i.stack.imgur.com/YNcLn.png

Thank you so much, I am very stuck with this!

PS: I want to take category name and join with my code with other columns.

You only need to append 2 more JOIN s to your query:

  • Join oc_productoc_product_to_category to link products with their categories
  • Then Join oc_product_to_categoryoc_category_description to grab the category details

This way you can include to your query whichever fields you need from any of the joined tables.

SELECT p.product_id, p.image, p.price, d.name, c.name, c.description
FROM oc_product AS p
JOIN oc_product_description AS d
    ON p.product_id = d.product_id
JOIN oc_product_to_category AS pc
    ON pc.product_id = p.product_id
JOIN oc_category_description AS c
    ON c.category_id = pc.category_id;

As you noted, the use of aliases for the actual table names helps to simplify a bit both the SELECT and the JOIN - ON segments of the query.

I've created a quick example here to show the results.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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