我很难创建一个查询来从几个表中获取数据。
以下是表:-





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

因此,基表make_ID值需要引用make表来填充结果中的make列。我在这个查询中所做的一点:-
SELECT code, make, Model_ID, time
FROM makes
INNER JOIN base
ON makes.ID = base.make_ID;但是,我发现 model 列很棘手,因为我需要从make中获得结果,并使用它来选择正确的表来获得模型。因此,查看第一行,我需要获取make结果,即brillo,然后使用它引用使用model_ID的id的brillo表,以获得finepadE 226。
我如何扩展我的查询来做到这一点?任何洞察力都将不胜感激。
发布于 2019-02-15 14:24:23
就像曾傑瑞说的,你需要一个像这样的桌子make_models
+---------------+---------+----------+------------+
| 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_model_id,而不是引用model_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;或:
INNER JOIN make_models
ON base.make_models_id = make_models.make_models_id ;如果您不能更改您的模型,您可以创建一个子查询来动态构建它。查看如何根据来自make_id表的id分配makes
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_idhttps://stackoverflow.com/questions/54710812
复制相似问题