mysql - 如何使用同一个表连接表两次

时间:2013-09-05 13:51:56

标签: mysql sql join

我有两张桌子:

主:

id | name | hair_color | eye_color
1  | a    | 1          | 2
2  | b    | 1          | 3
3  | c    | 4          | 3

产品:

id | name 
1  | black
2  | blue
3  | green
4  | blonde

我想从Main表中选择一行,但是将items_color和eye_color id替换为Items表所适合的名称。

我的意思是,对于主表中的第1行,我想得到这个细节:

$res = array(
           id=>1,
           name=>'a',
           hair_color=>'black',
           eye_color=>'blue');

我尝试了这个不正确的mysql查询:

SELECT `main`.`id`, `main`.`name`, `items`.`name` as `hair_color`, `items`.`name` as `eye_color`
FROM `main`
LEFT JOIN `items` ON `main`.`hair_color` = `items`.`id
LEFT JOIN `items` ON `main`.`eye_color` = `items`.`id
WHERE `main`.`id` = 1

我知道这个查询不正确,但我不知道该怎么做。

有什么想法吗?

由于

修改

谢谢大家!

2 个答案:

答案 0 :(得分:0)

您只需要为items表提供别名:

SELECT `main`.`id`, `main`.`name`,
       hi.`name` as `hair_color`, ei.`name` as `eye_color`
FROM `main`
LEFT JOIN `items` hi ON `main`.`hair_color` = hi.`id`
LEFT JOIN `items` ei ON `main`.`eye_color` = ei.`id`

答案 1 :(得分:0)

你很亲密,但你需要别名。

这样的东西
SELECT `main`.`id`, 
       `main`.`name`, 
       h.`name` as `hair_color`, 
       e.`name` as `eye_color`
FROM `main`
LEFT JOIN `items` h ON `main`.`hair_color` = h.id
LEFT JOIN `items` e ON `main`.`eye_color` = e.id
WHERE `main`.`id` = 1

SQL Fiddle DEMO