Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mySQL-需要帮助创建以不同方式引用多个表的查询吗_Mysql - Fatal编程技术网

mySQL-需要帮助创建以不同方式引用多个表的查询吗

mySQL-需要帮助创建以不同方式引用多个表的查询吗,mysql,Mysql,我正在努力创建一个查询来从多个表中获取数据 以下是表格:- 我想查询基表和其他表,以得到以下行:- 因此,基表make_ID值需要引用makes表来填充结果中的make列。我已经设法解决了这个问题:- SELECT code, make, Model_ID, time FROM makes INNER JOIN base ON makes.ID = base.make_ID; 但是我发现model列很棘手,因为我需要从make获得结果,并使用该结果选择正确的表来获取模型。因此,查看第

我正在努力创建一个查询来从多个表中获取数据

以下是表格:-


我想查询基表和其他表,以得到以下行:-

因此,基表make_ID值需要引用makes表来填充结果中的make列。我已经设法解决了这个问题:-

SELECT code, make, Model_ID, time
FROM makes
INNER JOIN base
ON makes.ID = base.make_ID;
但是我发现model列很棘手,因为我需要从make获得结果,并使用该结果选择正确的表来获取模型。因此,查看第一行,我需要获取生成结果,即brillo,然后使用model_id中的id引用brillo表,以获得finepad


如何展开查询以执行此操作?如果您有任何见解,我们将不胜感激。

正如Jerry所说,您需要一张表格
制作这样的模型

+---------------+---------+----------+------------+
| make_model_id | make_id | model_id |   model    |
+---------------+---------+----------+------------+
|             1 |       1 |        1 | finepad    |
|             2 |       1 |        2 | harshpad   |
|             3 |       2 |        1 | toothbrush |
|             4 |       2 |        2 | toothpaste |
|             5 |       3 |        1 | ovenchips  |
|             6 |       3 |        2 | porkpie    |
+---------------+---------+----------+------------+
    ^^ unique identifier
因此,在您的
base
表中,您可以引用
make\u model\u id
,而不是引用
make\u id
,这是唯一的,因此您可以使用与
makes
表相同的方式进行连接

SELECT code, make, Model_ID, time
FROM makes
INNER JOIN base
ON makes.ID = base.make_ID
INNER JOIN make_models
   ON base.make_id = make_models.make_id
  AND base.model_id = make_models.model_id;
SELECT base.code, makes.make, make_models.model, base.time
FROM base
JOIN make
  ON base.make_id = makes.id
JOIN ( SELECT 1 as make_id, model_id,  model
       FROM brillo
       UNION ALL
       SELECT 2 as make_id, model_id,  model
       FROM colgate
       UNION ALL
       SELECT 3 as make_id, model_id,  model
       FROM mccaine
     ) as make_models
  ON base.make_id = make_models.make_id
 AND base.model_id = make_models.model_id
或:

如果无法更改模型,可以创建一个子查询来动态构建它。请参见如何基于
makes
表中的id分配
make\u id

SELECT code, make, Model_ID, time
FROM makes
INNER JOIN base
ON makes.ID = base.make_ID
INNER JOIN make_models
   ON base.make_id = make_models.make_id
  AND base.model_id = make_models.model_id;
SELECT base.code, makes.make, make_models.model, base.time
FROM base
JOIN make
  ON base.make_id = makes.id
JOIN ( SELECT 1 as make_id, model_id,  model
       FROM brillo
       UNION ALL
       SELECT 2 as make_id, model_id,  model
       FROM colgate
       UNION ALL
       SELECT 3 as make_id, model_id,  model
       FROM mccaine
     ) as make_models
  ON base.make_id = make_models.make_id
 AND base.model_id = make_models.model_id

正如Jerry所说,你需要一张桌子,像这样制作模型

+---------------+---------+----------+------------+
| make_model_id | make_id | model_id |   model    |
+---------------+---------+----------+------------+
|             1 |       1 |        1 | finepad    |
|             2 |       1 |        2 | harshpad   |
|             3 |       2 |        1 | toothbrush |
|             4 |       2 |        2 | toothpaste |
|             5 |       3 |        1 | ovenchips  |
|             6 |       3 |        2 | porkpie    |
+---------------+---------+----------+------------+
    ^^ unique identifier
因此,在您的
base
表中,您可以引用
make\u model\u id
,而不是引用
make\u id
,这是唯一的,因此您可以使用与
makes
表相同的方式进行连接

SELECT code, make, Model_ID, time
FROM makes
INNER JOIN base
ON makes.ID = base.make_ID
INNER JOIN make_models
   ON base.make_id = make_models.make_id
  AND base.model_id = make_models.model_id;
SELECT base.code, makes.make, make_models.model, base.time
FROM base
JOIN make
  ON base.make_id = makes.id
JOIN ( SELECT 1 as make_id, model_id,  model
       FROM brillo
       UNION ALL
       SELECT 2 as make_id, model_id,  model
       FROM colgate
       UNION ALL
       SELECT 3 as make_id, model_id,  model
       FROM mccaine
     ) as make_models
  ON base.make_id = make_models.make_id
 AND base.model_id = make_models.model_id
或:

如果无法更改模型,可以创建一个子查询来动态构建它。请参见如何基于
makes
表中的id分配
make\u id

SELECT code, make, Model_ID, time
FROM makes
INNER JOIN base
ON makes.ID = base.make_ID
INNER JOIN make_models
   ON base.make_id = make_models.make_id
  AND base.model_id = make_models.model_id;
SELECT base.code, makes.make, make_models.model, base.time
FROM base
JOIN make
  ON base.make_id = makes.id
JOIN ( SELECT 1 as make_id, model_id,  model
       FROM brillo
       UNION ALL
       SELECT 2 as make_id, model_id,  model
       FROM colgate
       UNION ALL
       SELECT 3 as make_id, model_id,  model
       FROM mccaine
     ) as make_models
  ON base.make_id = make_models.make_id
 AND base.model_id = make_models.model_id

您是否能够更改此数据库的架构?我问的原因是,您可能需要的是一个
make_model
表,该表为每个make分配唯一的标识符,这样可以更容易地获取后续模型。将表和数据发布为text@jerry M。感谢您的评论。“make”表和你的建议不一样吗?@michaepavlosmael我不这么认为。以
Makes
中的
id1
为例,它应该对应于
brillo
。该ID也出现在表
brillo
colgate
mccaine
中。因此,这不允许专门获取brillo产品。有很多方法可以解决这个问题,但从根本上说,应该更改数据库。如果你愿意的话,我很乐意将此作为回答。@JerryM。对,我想我明白了。因此,如果我将
makes
中的
ID
更改为一些独特的内容,例如
makes\u ID
(并对包含模型的3个表执行相同操作),这是否是正确的方向?如果是这样的话,你能详细说明如何调整我的查询以适应它吗?你能改变这个数据库的模式吗?我问的原因是,您可能需要的是一个
make_model
表,该表为每个make分配唯一的标识符,这样可以更容易地获取后续模型。将表和数据发布为text@jerry M。感谢您的评论。“make”表和你的建议不一样吗?@michaepavlosmael我不这么认为。以
Makes
中的
id1
为例,它应该对应于
brillo
。该ID也出现在表
brillo
colgate
mccaine
中。因此,这不允许专门获取brillo产品。有很多方法可以解决这个问题,但从根本上说,应该更改数据库。如果你愿意的话,我很乐意将此作为回答。@JerryM。对,我想我明白了。因此,如果我将
makes
中的
ID
更改为一些独特的内容,例如
makes\u ID
(并对包含模型的3个表执行相同操作),这是否是正确的方向?如果是这样,您能否详细说明如何调整我的查询以适应这种情况?我想尝试避免为
makes
models
创建一个表。这个数据集非常小,但我想要一个可以处理数百个品牌的系统,每个品牌都有数百个模型。我面临的部分挑战是将每个make模型分组到单独的表中。我建议您不要创建多个表,而是将所有内容放在
make\u models
中,正如我所理解的那样。如果我想不出别的办法,我想我会回到你的方法上来。非常感谢您的意见。我想尝试避免为
品牌
型号
设置一个表。这个数据集非常小,但我想要一个可以处理数百个品牌的系统,每个品牌都有数百个模型。我面临的部分挑战是将每个make模型分组到单独的表中。我建议您不要创建多个表,而是将所有内容放在
make\u models
中,正如我所理解的那样。如果我想不出别的办法,我想我会回到你的方法上来。我感谢你的意见。