Mysql 连接多个表时出现问题
我有四张桌子: products sizes 这是我的SQL代码:Mysql 连接多个表时出现问题,mysql,database,join,Mysql,Database,Join,我有四张桌子: products sizes 这是我的SQL代码: SELECT DISTINCT products.product_name, sizes.pizza_size_name FROM products, menu_details, pizza_menus, sizes WHERE products.product_id = menu_details.products_fk AND menu_det
SELECT DISTINCT products.product_name, sizes.pizza_size_name
FROM products, menu_details, pizza_menus, sizes
WHERE products.product_id = menu_details.products_fk
AND menu_details.pizza_menus_fk = pizza_menus.menu_id
AND pizza_menus.size_id = sizes.pizza_size_id
AND menu_details.order_details_fk = 132
我的期望输出
----------------------------------
| product_name | pizza_size_name |
----------------------------------
| Italyan | Small |
| Classic | Small |
| Lamb | Small |
| Evi | Medium |
----------------------------------
我得到的输出
----------------------------------
| product_name | pizza_size_name |
----------------------------------
| Italyan | Small |
| Classic | Small |
| Lamb | Small |
| Evi | Small |
| Italyan | Medium |
| Classic | Medium |
| Lamb | Medium |
| Evi | Medium |
----------------------------------
对于这样简单的问题,我知道的表格太多了,但无论如何我真的很感谢你的帮助,谢谢 菜单详情和比萨饼菜单之间的关联错误,因此我将菜单详情更改为:
--------------------------------------------------------
| id | order_details_fk | pizza_menus_fk | products_fk |
--------------------------------------------------------
| 17 | 132 | 25 | 39 |
| 18 | 132 | 26 | 40 |
| 19 | 132 | 27 | 41 |
| 20 | 132 | 28 | 42 |
--------------------------------------------------------
下面是我的新SQL:
SELECT DISTINCT products.product_name, sizes.pizza_size_name
FROM products, menu_details, pizza_menus, sizes
WHERE products.product_id = menu_details.products_fk
AND menu_details.pizza_menus_fk = pizza_menus.id
AND pizza_menus.size_id = sizes.pizza_size_id
AND menu_details.order_details_fk = 132
外键通常应引用另一个表的唯一键。为什么
pizza\u menu\u fk
指的是pizza\u menu.id
而不是pizza\u menu.id
?得到这个结果的原因是menu\u id=92
既有size\u id=1
又有size\u id=2
。因此,所有带有比萨饼菜单的菜单详细信息
都有两种尺寸。如果您使用id
而不是menu\u id
作为外键,那么您可以指向pizza\u menu
中的特定行,只获得一个大小。@Barmar-是的,先生。那是我的错误。非常感谢。@AbdulAzizNurov,请将答案添加为答案,而不是在问题中发布答案;这样,你就可以用问答的方式分享你的解决方案(这就是全部):@Barranka谢谢你的提示。这是我的第一次经历,所以我不知道我能回答我自己的问题:D
SELECT DISTINCT products.product_name, sizes.pizza_size_name
FROM products, menu_details, pizza_menus, sizes
WHERE products.product_id = menu_details.products_fk
AND menu_details.pizza_menus_fk = pizza_menus.menu_id
AND pizza_menus.size_id = sizes.pizza_size_id
AND menu_details.order_details_fk = 132
----------------------------------
| product_name | pizza_size_name |
----------------------------------
| Italyan | Small |
| Classic | Small |
| Lamb | Small |
| Evi | Medium |
----------------------------------
----------------------------------
| product_name | pizza_size_name |
----------------------------------
| Italyan | Small |
| Classic | Small |
| Lamb | Small |
| Evi | Small |
| Italyan | Medium |
| Classic | Medium |
| Lamb | Medium |
| Evi | Medium |
----------------------------------
--------------------------------------------------------
| id | order_details_fk | pizza_menus_fk | products_fk |
--------------------------------------------------------
| 17 | 132 | 25 | 39 |
| 18 | 132 | 26 | 40 |
| 19 | 132 | 27 | 41 |
| 20 | 132 | 28 | 42 |
--------------------------------------------------------
SELECT DISTINCT products.product_name, sizes.pizza_size_name
FROM products, menu_details, pizza_menus, sizes
WHERE products.product_id = menu_details.products_fk
AND menu_details.pizza_menus_fk = pizza_menus.id
AND pizza_menus.size_id = sizes.pizza_size_id
AND menu_details.order_details_fk = 132