Mysql 查询指向另一个表中一行的多行

Mysql 查询指向另一个表中一行的多行,mysql,sql,Mysql,Sql,我不擅长做mySQL查询,因此无法完成工作。我希望你们知道我问题的答案 我想选择我的产品。就像你有一件黑色t恤,上面有一个背心模型和钻石。你必须有黑色t恤背心模型和钻石排。我想这样做: table: product_option -------------------------------- product_option_id name product_combination_id 1 Black 1 2 D

我不擅长做mySQL查询,因此无法完成工作。我希望你们知道我问题的答案

我想选择我的产品。就像你有一件黑色t恤,上面有一个背心模型和钻石。你必须有黑色t恤背心模型和钻石排。我想这样做:

table: product_option
--------------------------------
product_option_id   name    product_combination_id
1                   Black   1
2                   Diamond 1
3                   Tanktop 1
4                   Option  2
5                   Option  2

table: product_combination
--------------------------------
product_combination_id   name                         
1                        Black tanktop with diamonds
所以我的问题是。是否可以查询产品选项并从中获取产品组合行

我希望你们知道我问题的答案!感谢您抽出时间:)

编辑: 我觉得我的问题太笼统了,我想问得更具体一些

比如说。我有一家服装店。我有一个产品(比如一件T恤)。有两种选择

像这样:

Color:
- Black
- Red
- Orange

Size
- Large
- Xtra Large
- Medium
- Small

Accessoire:
- Diamonds
- Printed
- Swarovski 
比如说,我想买一件黑色/Xtra大号T恤,上面有钻石。然后,
产品组合
必须为黑色/大/菱形行。我想我需要一张具有多对多关系的外国桌子。类似于具有以下列的产品组合选项表:

 product_combination_option
 - product_combination_option_id
 - product_combination_id
 - product_option_id
但话说回来。当有人选择黑色/Xtra大号钻石时,我如何查询并找到哪个
产品组合


我希望我现在更清楚一点。很抱歉,我这么晚才更新我的问题!我非常感谢你的回答

我认为您需要的是加入您的表格,这样您就可以根据您拥有的产品选择组合。
因此,可以使用查询

Select * 
from product_option inner join product_combination
using(product_combination_id);

这将连接两个表。因此,您可以将*替换为要显示/获取的属性列表。

如果您的意思是要将选项列表传递给查询,并获取匹配的
产品组合
条目列表,那么有一种方法:

SELECT *
FROM product_combination
WHERE product_combination_id IN (
  SELECT product_combination
  FROM product_option
  WHERE name IN ('option1', 'option2', 'option3')
  GROUP BY product_combination
  HAVING COUNT(*) = 3
);
子查询返回一组
product\u组合
值,这些值具有所有三个请求的选项。
COUNT(*)=3
条件假设单个
产品组合
值不能有重复的
名称
值与其关联。(这很自然,但如果您的表没有相应的限制,您可以将
COUNT(*)
替换为
COUNT(不同的名称)
,以确保返回的组包含所有指定的三个选项,而不仅仅是三行,其中一些行包含相同的选项。)

当然,如果查询的选项数量不是固定的,您将需要动态地构建查询,因为IN谓词是不可参数化的(根据项目数量)。但是,您可以尝试使用临时行集而不是硬编码列表。在运行有问题的查询之前,将填充该表,在这种情况下,将对此进行修改:

SELECT *
FROM product_combination
WHERE product_combination_id IN (
  SELECT product_combination
  FROM product_option
  WHERE name IN (SELECT option_name FROM requested_options)
  GROUP BY product_combination
  HAVING COUNT(*) = (SELECT COUNT(*) FROM requested_options)
);

在上面的查询中,
requested_options
是临时存储的名称(可能是一个临时表,但我不确定MySQL是否允许您访问在不同查询中预先创建和填充的表),而
option\u name
是其包含所请求选项的列。

您如何尝试查询数据库?使用给定的选项名称或选项id?如果按名称,它可能不会是唯一的,因为现在表的设计方式是,每个名称都与组合有一对一的关联。对不起。那不是我要找的。我想做一个查询,让get的查询“product\u option”表并向我提供“product\u组合”您是否尝试过将产品属性组合获取的值串联起来,然后从组合表中获取?然而,我认为,将这么多的组合输入到该表中需要做很多工作。为什么不直接连接并获取连接的组合,而不是创建一个新表呢?请告诉我这次我是否理解你的问题。嗨,谢谢你的回答!我真的很感激。“产品选项”是一个包含所有选项的表。选项的数量不是固定的。我想我需要一个外国表一样的产品组合选项。我将所有可能的组合与产品选项中的选项放在一起。在我的问题中,我对我的问题进行了编辑,使之更加具体。我希望你能理解我的英语有点差。因此很难让我的问题正确。我希望你现在能理解我的目标!啊,现在看来您还有另一个问题要解决,即模式设计(或者重新设计)。请不要误解我的意思,但我认为您最初关于查询的问题在这一点上变得毫无意义,因为现在还不清楚到底要查询什么(哪些表和哪些列)。您应该先了解第一件事:在试图解决如何查询数据的问题之前,先了解数据的存储方式。如果你需要帮助,请发布一个新问题。我相信这里有很多人对此提出了很好的建议。