【问题标题】:how to write this mysql join如何编写这个 mysql 连接
【发布时间】:2011-12-12 19:13:38
【问题描述】:

我有下表

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 次,谁能帮我理解这个加入条件

【问题讨论】:

  • "如何加入同一个表 3 次" --- 你只需加入同一个表 3 次,给出不同的别名。将表连接到自身并没有什么特别的魔力
  • 仅供参考:项目表未标准化。如果一件物品的成分超过 3 种,你会怎么做?

标签: mysql database select join


【解决方案1】:
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        

【讨论】:

  • 感谢您的回答,但在执行上述代码时出现以下错误 - 错误 1052 (23000): 字段列表中的列 'id' 不明确,无论如何非常感谢您的回答:D
  • 修复了列列表中的歧义。
  • 酷,谢谢布赖恩,我必须在所有选择列中添加“项目”才能使其正常工作,谢谢
【解决方案2】:

试试

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

【讨论】:

    【解决方案3】:

    您好,您可以使用不同别名的同一张表。

    成分 AS In1 成分 AS In2 成分 AS In3

    【讨论】:

      【解决方案4】:

      我想这就是你要找的:

      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
      

      【讨论】:

        猜你喜欢
        • 2014-07-27
        • 2012-02-03
        • 2011-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-03
        • 2011-10-23
        相关资源
        最近更新 更多