从三个表中选择的数据会重复

时间:2014-06-25 17:29:19

标签: mysql sql

我用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

更新 对不起,伙计们,我已经更新了我的表格数据,希望这次有意义。 请问我在上面的查询中做错了什么。谢谢你的帮助。

2 个答案:

答案 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将表格相互关联起来。