i have 2 tables (example):

product:

|  id | name                |
|  1  | product1            |
|  2  | product2            |
|  3  | product3            |

product_categories:

|  product_id | category_id |
|      1      |      5      |
|      1      |      3      |
|      2      |      5      |
|      3      |      17     |
|      3      |      5      |


我想选择类别ID为5和3的那些产品。

SELECT p.*
  FROM products p
  LEFT
  JOIN product_categories pc
    ON pc.product_id = p.id
 WHERE ?

最佳答案

没有必要使用LEFT JOIN,因为您不希望出现不匹配的行。
按产品分组并在HAVING子句中将产品设置为具有两个类别的条件:

SELECT p.id, p.name
FROM products p INNER JOIN product_categories pc
ON pc.product_id = p.id
WHERE pc.category_id IN (3, 5)
GROUP BY p.id, p.name
HAVING COUNT(DISTINCT pc.category_id) = 2

关于mysql - MySQL从联接表那里,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58437265/

10-11 22:25
查看更多