我用mysql创建了三个表(汽车,颜色和品牌)。我想从三个表中选择数据,但数据正在重复。
注意:请颜色和品牌表中的car_ID引用汽车表中的car_ID列。
cars table
car_ID | type
1 | 300
2 | 200
colors table
id | color | car_ID
1 | red | 1
2 | blue | 1
3 | black| 2
4 | green| 2
brands
id | brand | car_ID
1 | BMW | 1
2 | cst | 1
3 | ash | 2
4 | golf | 2
SELECT
a.car_ID
b.color
c.brand
FROM
cars a
INNER JOIN
colors b
ON
a.car_ID=b.id
INNER JOIN
brands c
ON
a.car_ID=c.id
WHERE
a.Car_ID=1;
这会重复所需的数据,这就是我收到的
Car_ID | colors | brands
1 | red | BMW
1 | blue | cst
1 | red | BMW
1 | blue | cst
但是,以下数据是我希望收到的数据
id | colors | brands
1 | red | BMW
1 | blue | cst
更新 对不起,伙计们,我已经更新了我的表格数据,希望这次有意义。 请问我在上面的查询中做错了什么。谢谢你的帮助。
答案 0 :(得分:1)
(我输入了..然后意识到我不知道你想做什么......但我还是会把它留下来)
您的表格定义不明确......这是我建议的表格结构:
汽车表
id | type_id | colour_id
1 | 1 | 1
2 | 2 | 4
车型id
id | brand_id | name
1 | 1 | 300
2 | 1 | 200
颜色表
id | name
1 | Red
2 | Blue
3 | Black
4 | Green
品牌表:
id | name
1 | BMW
2 | cst
3 | ash
4 | golf
查询...
SELECT c.id as car_id, t.name as `type`, b.name as `brand`, co.name as `colour`
FROM cars c
INNER JOIN types t ON t.id = cars.type_id
INNER JOIN brands b ON b.id = t.brand_id
INNER JOIN colours co ON co.id = c.colour_id
它应该返回类似下面的内容
car_id | type | brand | colour
1 | 300 | BMW | Red
2 | 300 | BMW | Green
答案 1 :(得分:0)
很难从你的问题中猜出一切是如何运作的,但似乎你可能想要......
SELECT a.car_ID
b.color
c.brand
FROM cars a
INNER JOIN colors b ON a.car_ID=b.car_ID /* changed ON criterion */
INNER JOIN brands c ON a.car_ID=c.car_ID
WHERE a.Car_ID=1
我猜你总是使用car_ID
将表格相互关联起来。