2017-04-25 108 views
2

我有兩個表:MySQL的 - 「子查詢返回多個1行」 錯誤

成分

| 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  | 
---------------------- 
|  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只是加入讓foodproducts的ID

+2

使用'IN'而不是'='...或 – Hackerman

+2

你顯著過於複雜的查詢,並有可能使用不正確的條件,您可以添加'LIMIT 1'你的子查詢,如'ingredients.id = foodproduct_ingredient.foodProduct_id'。另外,除非你想從「食品」中得到一些其他信息,你實際上並不需要引用該表;您已經聲明/暗示您擁有該表格中的編號。 _這應該是一個簡單的雙表連接,帶有單條件where子句;問問你自己想要的信息,它來自哪裏,以及你必須得到什麼信息._ – Uueerdo

+0

@Uererdo是的,我也想引用食品產品的id,所以我加入這個表 –

回答

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 
+0

@AdnanFajri你還可以嘗試我寫的其他查詢。 – DevelopmentIsMyPassion

+0

在您的查詢中,does not引用id從foodproducts表 –

+1

@AdnanFajri編輯查詢。如果可能,請檢查並接受答案 – DevelopmentIsMyPassion