【问题标题】:Join one to many with multiple where用多个 where 加入一对多
【发布时间】:2017-11-07 04:28:08
【问题描述】:

这是产品表:

+-----------+
| id | name |
+-----------+
| 1  | A    | 
+-----------+
| 2  | B    | 
+-----------+
| 3  | C    | 
+-----------+ 

这是 product_filter 表:

+-----------------+-----------+
| id | product_id | filter_id |
+-----------------+-----------+
| 1  | 1          | 1         |
+-----------------------------+
| 2  | 1          | 2         |
+-----------------------------+ 
| 3  | 2          | 1         |
+-----------------------------+
| 4  | 2          | 2         |
+-----------------------------+
| 5  | 2          | 3         |
+-----------------------------+
| 6  | 3          | 1         |
+-----------------------------+
| 7  | 3          | 3         |
+-----------------------------+

我想如果 product_filter.filter_id = 1 和 product_filter.filter_id = 2 product.id 的结果是 1 和 2

如果 product_filter.filter_id = 1 和 product_filter.filter_id = 3 则 product.id 的结果是 1 和 3

这是我的查询,它不起作用:

SELECT `products`.`id`, `product_filter`.`filter_id`
FROM `products` 
JOIN `product_filter` ON `product_filter`.`product_id` = `products`.`id` 
WHERE `product_filter`.`filter_id` = '1' AND `product_filter`.`filter_id` = '2'

【问题讨论】:

    标签: mysql join where


    【解决方案1】:

    IN代替AND

    SELECT
        p.id,
        pf.filter_id
    FROM products p
    INNER JOIN product_filter pf
        ON pf.product_id = p.id
    WHERE
        pf.filter_id IN (1, 2);
    

    【讨论】:

    • 我尝试将 AND 更改为 OR,结果是 3(1、2 和 3)
    • @DimasAdiAndrea 你尝试过蒂姆建议的查询吗?
    • @DimasAdiAndrea 你试过IN
    • 是的,还是一样
    • @DimasAdiAndrea 试试这个 pf.filter_id IN (1, 2);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多