Mysql - "子查询返回超过1行"错误

时间:2017-04-25 19:36:24

标签: mysql

我有两张桌子:

成分

|   id   |       iName      |
-----------------------------
|   101  |     Curcumin     |
|   102  |     Riboflavin   |
|   103  |     Protease     |
|   104  |    Tartrazine    |
|   105  |      Amylase     |

foodproduct_ingredient

|  foodproduct_id  |  ingredient_id   |
---------------------------------------
|         1        |        101       |
|         1        |        102       |
|         1        |        104       |

我只想获得每种食品的清单iName。 例如,当我想在 foodproducts.id = 1 中获取iName时必须

|        iName       |
----------------------
|      Curcumin      |
|      Riboflavin    |
|      Tartrazine    |

我试图插入查询:

SELECT ingredients.iName FROM ingredients INNER JOIN foodproduct_ingredient 
        ON ingredients.id = foodproduct_ingredient.foodProduct_id 
        WHERE ingredients.id = 
        (SELECT foodproduct_ingredient.ingredient_id FROM foodproduct_ingredient INNER JOIN foodproducts 
        ON foodproducts.id = foodproduct_ingredient.foodProduct_id 
        WHERE foodproducts.id = 1)

但它返回子查询返回超过1行

有人能帮助我吗?谢谢:))

*注意:表格 foodproducts 仅用于加入以获取食品产品的ID

1 个答案:

答案 0 :(得分:3)

我认为你应该使用IN子句

SELECT ingredients.iName FROM ingredients INNER JOIN foodproduct_ingredient 
    ON ingredients.id = foodproduct_ingredient.foodProduct_id 
    WHERE ingredients.id In 
    (SELECT foodproduct_ingredient.ingredient_id FROM foodproduct_ingredient INNER JOIN foodproducts 
    ON foodproducts.id = foodproduct_ingredient.foodProduct_id 
    WHERE foodproducts.id = 1)

顺便说一句,你甚至不需要子查询。尝试使用以下查询

select i.iName from ingredients i
join foodproduct_ingredient fi
on fi.ingredient_id = i.id
where fi.foodproduct_id = 1
相关问题