内部联接返回重复的注册表

时间:2018-07-12 21:06:51

标签: mysql sql inner-join

嗯,我对此很陌生,所以这是我的问题。 我正在尝试建立多种餐厅菜单数据库,在结构上进行了许多努力之后,我得到了一个。

这是整体结构。

Clients
ID (int 10, PK)
mombre(varchar)
etc etc.(etc)

menucat
menuID (int 10, FK references clients.ID)
IDcat  (int 10, PK)
nombre

menuitem
ID (int 10, PK)
catID (int 10, FK references IDcat)
nombre



problem:

到目前为止,我有这个查询:

SELECT c.ID
     , c.nombre
     , mc.nombre
     , mi.nombre
FROM clientes as c
     , menuitem as mi
     , menucat
  JOIN menucat as mc 
    ON mc.IDcat = mi.cat Id
 GROUP 
    by mc.IDcat

这给我带来了:mc.nombre和mi,nombre很好,如预期的那样。

BUT,c.ID和c.nombre好像只在一个注册表中一样...我如何制定此查询,以便使两个客户端具有各自的菜单?

对不起,我的英语不好,我的写作技能也很差。

谢谢。顺便说一句,我正在使用phpmyadmin SQL控制台

1 个答案:

答案 0 :(得分:0)

SELECT c.ID , c.nombre , m.nombre , i.nombre 
FROM Clients AS c 
INNER JOIN menucat AS m 
  ON m.menuID = c.ID 
INNER JOIN menuitem AS i 
  ON i.catID = m.IDcat

这将返回所有菜单项及其关联的菜单和客户端。 (假设它们是关联的)

考虑重命名表中的列,以使数据库中的引用更容易。例如,对{{1}的约束FK的{​​{1}}约束应该在名为menucat或类似的列上。不在clients.ID上,因为它与客户有关,而不与菜单有关。

如果您向我们提供您要退货的示例,这也将有所帮助。