Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 连接多个表时出现问题_Mysql_Database_Join - Fatal编程技术网

Mysql 连接多个表时出现问题

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

我有四张桌子:

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_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