如何编写这个mysql连接

如何编写这个mysql连接,mysql,database,select,join,Mysql,Database,Select,Join,我有下表 mysql> desc items; +-------------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------------+--------------+------+-----+---------+----------

我有下表

mysql> desc items;
+-------------------+--------------+------+-----+---------+----------------+
| Field             | Type         | Null | Key | Default | Extra          |
+-------------------+--------------+------+-----+---------+----------------+
| id                | int(11)      | NO   | PRI | NULL    | auto_increment |
| code              | varchar(255) | YES  |     | NULL    |                |
| name              | varchar(255) | YES  |     | NULL    |                |
| price             | float        | YES  |     | NULL    |                |
| ingredient_id     | int(11)      | YES  |     | NULL    |                |
| ingredient_id2    | int(11)      | YES  |     | 0       |                |
| ingredient_id3    | int(11)      | YES  |     | 0       |                |
+-------------------+--------------+------+-----+---------+----------------+
还有我的配料表

mysql> desc ingredients;
+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| id           | int(11)      | NO   | PRI | NULL    | auto_increment |
| name         | varchar(255) | YES  |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+
component_id、component_id2、component_id3
列是“components”表的外键,我的要求是创建一个select查询以显示项目和成分,如下所示

select id, code, name, price, name as ingredient_name1, name as ingredient_name2, name as ingredient_name3

但是我不知道如何三次加入同一个表,有人能帮我理解这个加入条件吗?

嗨,你可以用不同的别名使用同一个表

成分如In1 成分如In2 如图3所示的配料

select items.id, 
code, 
name, 
price, 
in_1.name as ingredient_name1, 
in_2.name as ingredient_name2, 
in_3.name as ingredient_name3
from items
  join ingredients as in_1 on items.ingredient_id = in_1.id
  join ingredients as in_2 on items.ingredient_id2 = in_2.id        
  join ingredients as in_3 on items.ingredient_id3 = in_3.id        

我想这就是你想要的:

select it.id, it.code, it.name, it.price,
    ing1.name as name1, ing2.name as name2, ing3.name as name3
from items it, ingredients ing1, ingredients ing2, ingredients ing2
where it.ingredient_id = ing1.id
    and it.ingredient_id2 = ing2.id
    and it.ingredient_id3 = ing3.id

“如何连接同一个表3次”-您只需连接同一个表3次,给出不同的别名。将表连接到fyi的基本副本中并没有什么特别的魔力:items表并没有规范化。如果一个项目包含3种以上的成分,你会怎么做?谢谢你的回答,但我在执行上述代码时出现了以下错误-错误1052(23000):字段列表中的“id”列不明确,无论如何,非常感谢你的回答:d修复了列列表中的不明确。酷,谢谢brian,我必须在所有的选择栏中添加“项目”才能让它正常工作,谢谢
select it.id, it.code, it.name, it.price,
    ing1.name as name1, ing2.name as name2, ing3.name as name3
from items it, ingredients ing1, ingredients ing2, ingredients ing2
where it.ingredient_id = ing1.id
    and it.ingredient_id2 = ing2.id
    and it.ingredient_id3 = ing3.id