【问题标题】:Is it possible to connect 4 tables in SQL是否可以在 SQL 中连接 4 个表
【发布时间】:2026-01-26 09:55:02
【问题描述】:

是否可以使用一条 SQL 语句来获取下面的数据?

故事:我想要一个包含多个收据的多个成分的列表。

现在分贝:


列表

  • list_id
  • list_name
  • ...

lIST_LINE(连接表到收据)

  • list_id
  • receipt_id

收据

  • receipt_id

  • 收据名称

  • ...


RECEIPT_LINE(可连接到成分)

  • receipt_id

  • ingredient_id


成分

  • ingredient_id

  • 成分名称

  • ....


我想要一个完整列表,其中包含一个列表项中所有收据所需的所有成分。

这可能在 1 个查询中还是我必须在 php 中运行多个查询(使用数组)

【问题讨论】:

  • 超级,非常感谢!!!我使用错误的 head_table 进行查询

标签: php mysql sql foreign-keys inner-join


【解决方案1】:

当然,使用多个 INNER JOIN 语句。

SELECT * FROM LIST 
JOIN 
IIST_LINE
ON
IIST_LINE.list_id = LIST.list_id
JOIN 
RECEIPT
ON
IIST_LINE.receipt_id = RECEIPT.receipt_id
JOIN
RECEIPT_LINE
ON
RECEIPT_LINE.receipt_id = RECEPT.receipt_id
JOIN
INGREDIENT
ON
INGREDIENT.ingredient_id = RECEIPT_LINE.ingredient_id

然后为您要排序的特定列添加SORT BY(如receipt_line)

【讨论】:

    【解决方案2】:

    是的,你可以加入,但你应该像现在一样在每张桌子上都有关系:

    SELECT *
    FROM list l
    INNER JOIN list_line ll ON ll.list_id = l.list_id
    INNER JOIN receipt r ON r.receipt_it = ll.receipt_id
    INNER JOIN receipt_line rl ON rl.receipt_id = r.receipt_id
    INNER JOIN ingredient i ON i.ingredient_id = rl. ingredient_id
    

    【讨论】:

      【解决方案3】:

      是的,你可以:

       SELECT ll.list_id,i.ingredient_id,i.ingredient_name,r.receipt_id,r.receipt_name
       FROM list_line ll
       INNER JOIN receipt r ON r.receipt_id = ll.receipt_id
       INNER JOIN receipt_line rl ON rl.receipt_id = r.receipt_id
       INNER JOIN ingredient i ON i.ingredient_id = rl. ingredient_id
      

      如果您不想打印 list_name,则不需要第一个 table(List),因此我选择退出。

      【讨论】:

      • 如果有帮助,我们将不胜感激!