是否可以在SQL中连接4个表

时间:2016-09-06 07:04:35

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

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

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

db now:

LIST

  • LIST_ID
  • LIST_NAME
  • ...

lIST_LINE(可与收据联系)

  • list_id
  • receipt_id

RECEIPT

  • receipt_id

  • receipt_name

  • ...

RECEIPT_LINE(与成分连接)

  • receipt_id

  • ingredient_id

INGREDIENT

  • ingredient_id

  • ingredient_name

  • ...

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

这可能在1个查询中,或者我必须在php(带数组)中运行多个查询

3 个答案:

答案 0 :(得分:0)

当然,请使用多个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)

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

是的,你可以:

 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,则不需要第一张表(列表),因此我选择退出。