2012-08-27 40 views
0

我應該得到所有地方的ID的另一個ID相匹配的行...MySQL的SQL錯誤

這是代碼,我要鏈接2個表...

SELECT * 
    FROM acw_papers_web 
    WHERE id_paper_web = (SELECT id_paper_web 
          FROM acw_papers_web_autores 
          WHERE nombre_autor_pw LIKE'%Chicaiza%') 

我得到的錯誤:Subquery returns more than 1 row

我注意到爲什麼...

但insted的用PHP代碼(我與工作)將其固定,可推動每個ID,並將爲那些每一個查詢,我d喜歡做它機智h sql。

回答

2

你也可以使用EXISTS()代替IN(),這可能是有點快。

SELECT a.id_paper_web 
    FROM acw_papers_web as a 
    WHERE 
    EXISTS 
    (
    SELECT b.id_paper_web 
    FROM acw_papers_web_autores as b 
    WHERE b.nombre_autor_pw like '%Chicaiza%' AND b.id_paper_web = a.id_paper_web 
) 

DEMO

2

您正在嘗試多個值分配給=條件:

使用in代替:

SELECT 
    * 
FROM 
    acw_papers_web 
WHERE 
    id_paper_web in (
     SELECT 
      id_paper_web 
     FROM 
      acw_papers_web_autores 
     WHERE 
      nombre_autor_pw like '%Chicaiza%' 
      ) 
+1

或者,等價地,'= ANY'或'= SOME'。 – eggyal

+0

@eggyal聖潔蝙蝠俠餅乾!你今天教給我一種新的語法! +1 – Fluffeh

1

您可以將=更改爲。

SELECT * FROM acw_papers_web WHERE id_paper_web IN (SELECT id_paper_web FROM acw_papers_web_autores WHERE nombre_autor_pw like '%Chicaiza%') 
1

與運營商更換=登錄:

SELECT * FROM acw_papers_web 
WHERE id_paper_web IN (
    SELECT id_paper_web FROM acw_papers_web_autores 
    WHERE nombre_autor_pw like '%Chicaiza%' 
)