MySQL基于同一表中的多个条件从两个表中选择

时间:2020-06-25 09:49:11

标签: mysql database join

我正在尝试构建一个过滤器,以便根据某些规格快速找到合适的产品。但是我无法使MySQL运行。现在已经搜寻了一段时间,但找不到类似的问题。我希望你能帮助我。

files = {
    "file": (
        "new_data.csv",
        open("D:/cf_upload-sheet/new_data.csv", "rb"),
        "text/csv",
        {"Expires": "0"},
    )
}

这是MySQL我希望它如何工作。

This is the products table
--------------------
|  id  |  name     |
--------------------
|   1  | Product 1 |
|   2  | Product 2 |
|   3  | Product 3 |
--------------------

This is the relation table for the specifications
--------------------------------
|  id  |  specs_id  |  prod_id  |
--------------------------------
|   1  |     1      |     1     |
|   2  |     5      |     1     |
|   3  |     6      |     2     |
|   4  |     9      |     3     |
|   5  |     11     |     2     |
---------------------------------

此示例将不会给出结果

$sql = "SELECT p.id, p.name                 
        FROM products p
        JOIN specs s ON p.id = s.prod_id
        WHERE s.specs_id = 1
        AND s.specs_id = 5
        AND s.specs_id = 7
        GROUP BY p.id";

这将返回ID为1的产品

3 个答案:

答案 0 :(得分:2)

Item_id在您的表中不存在。您还使用了 OR AND 插入,因此没有匹配的条目。没有人可以同时拥有specs_id 2,5和7。

SELECT p.id, p.name                 
FROM products p
JOIN specs s
ON p.id = s.prod_id
WHERE s.specs_id = 5
OR s.specs_id = 2
OR s.specs_id = 7
GROUP BY p.id;

答案 1 :(得分:1)

您正在寻找ORIN

SELECT DISTINCT p.id, p.name
FROM products p
  JOIN specs s ON p.id = s.prod_id
WHERE s.specs_id IN (1,5);

SELECT DISTINCT p.id, p.name
FROM products p
  JOIN specs s ON p.id = s.prod_id
WHERE s.specs_id=1 OR s.specs_id=5;

此外,如果您没有聚合函数,请使用DISTINCT而不是GROUP BY

答案 2 :(得分:0)

您可以像先用必需的specs过滤specs_id表,然后将结果与products表联接一样。

select p.id, p.name from 
(select * from products p ) p 
join (select * from specs where specs_id in (1,5,7)) s
on p.id = s.prod_id
group by p.id

相关问题