как написать этот MySQL присоединиться - PullRequest
0 голосов
/ 12 декабря 2011

У меня есть следующая таблица

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    |                |
+--------------+--------------+------+-----+---------+----------------+

и ingredient_id, ingredient_id2, ingredient_id3 столбцы являются внешними ключами таблицы «ингредиенты», мое требование состоит в том, чтобы создатьвыберите запрос для отображения элементов и ингредиентов следующим образом

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

Но я не знаю, как присоединиться к одной таблице 3 раза, может кто-нибудь помочь мне разобраться в этом условии объединения

Ответы [ 4 ]

3 голосов
/ 12 декабря 2011
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        
1 голос
/ 12 декабря 2011

Я думаю, это то, что вы ищете:

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
1 голос
/ 12 декабря 2011

TRY

SELECT i.id, i.name, i.code, i.price, 
       ig1.name AS igName1,ig2.name AS igName2,ig3.name as igName3
FROM items i 
INNER JOIN ingredients ig1 ON ig1.id=i.ingredient_id
INNER JOIN ingredients ig2 ON ig2.id=i.ingredient_id2
INNER JOIN ingredients ig3 ON ig3.id=i.ingredient_id3
1 голос
/ 12 декабря 2011

Привет. Вы можете использовать одну и ту же таблицу с разными псевдонимами.

ингредиенты AS In1 ингредиенты AS In2 ингредиенты AS In3

...