2014-01-31 59 views
0

工作查詢SQL語法錯誤在查詢連接

 
( SELECT R.ref as ref, 
      R.field8, 
      R.file_extension, 
      DATE_FORMAT(R.creation_date,'%e/%c/%Y') as date, 
      Ra.rank as rank 
    FROM resource R 
    INNER JOIN resource_ranking Ra ON R.ref = Ra.ref_id 
    ORDER BY Ra.rank limit 2 
) 
UNION ALL 
( SELECT R.ref as ref, 
      R.field8, 
      R.file_extension, 
      DATE_FORMAT(R.creation_date,'%e/%c/%Y') as date, 
      '99' as rank 
    FROM resource R 
    LEFT JOIN (
      SELECT ref_id 
      FROM resource_ranking 
      ORDER BY rank LIMIT 2 
    ) AS B ON R.ref = B.ref_id 
    INNER JOIN collection_resource C ON R.ref = C.resource 
    WHERE B.ref_id IS NULL 
     AND R.ref != '-1' AND C.collection = 1 
) 
ORDER BY rank ASC, ref DESC LIMIT 0, 8 

上面的查詢工作正常我希望到另一個表添加到使用內現有查詢

下面是使用內我的書面查詢連接加入

 
( SELECT R.ref as ref, 
      R.field8, 
      R.file_extension, 
      DATE_FORMAT(R.creation_date,'%e/%c/%Y') as date, 
      Ra.rank as rank 
    FROM resource R 
    INNER JOIN resource_ranking Ra ON R.ref = Ra.ref_id 
    ORDER BY Ra.rank limit 2 
    INNER JOIN resource_rating Rr ON R.ref = Rr.resource_id 
    ORDER BY Rr.rating DESC 
) 
UNION ALL 
( SELECT R.ref as ref, 
      R.field8, 
      R.file_extension, 
      DATE_FORMAT(R.creation_date,'%e/%c/%Y') as date, 
      '99' as rank 
    FROM resource R 
    LEFT JOIN (
     SELECT ref_id 
     FROM resource_ranking 
     ORDER BY rank LIMIT 2 
    ) AS B ON R.ref = B.ref_id 
    INNER JOIN collection_resource C ON R.ref = C.resource 
    WHERE B.ref_id IS NULL AND Rr.userid=1 
     AND R.ref != '-1' AND C.collection = 1 
) 
ORDER BY rank ASC, ref DESC LIMIT 0, 8 

然而,這提供了以下錯誤:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INNER JOIN resource_rating Rr ON R.ref = Rr.resource_id ORDER BY Rr.rating DESC' at line 3 
+1

那又怎麼了?沒有行?行數太多? SQL中出錯? –

+0

#1064語法錯誤 - 您的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在第3行的'INNER JOIN resource_rating Rr ON R.ref = Rr.resource_id ORDER BY Rr.rating DESC'附近使用正確的語法 – Vasanth

+0

好的 - 我已將它添加到您的問題 –

回答

0

嘗試擺脫此之後:

ORDER BY Ra.rank limit 2 

如果你只想要兩行從加入放置LIMIT 2在第二個之後。

+0

我得到了我的查詢完美工作在這裏是我的查詢後,你的指導: – Vasanth

+0

好吧,最後我想爲這個查詢添加「ORDER BY Rr.rating DESC」我該如何適應。 – Vasanth

1

這是你的第一個子查詢:

SELECT R.ref as ref, R.field8, R.file_extension, 
     DATE_FORMAT(R.creation_date,'%e/%c/%Y') as date, Ra.rank as rank 
FROM resource R INNER JOIN 
    resource_ranking Ra 
    ON R.ref = Ra.ref_id 
ORDER BY Ra.rank 
limit 2 
INNER JOIN resource_rating Rr ON R.ref = Rr.resource_id ORDER BY Rr.rating DESC) 

inner join是放錯了地方。試試這個:

SELECT R.ref as ref, R.field8, R.file_extension, 
     DATE_FORMAT(R.creation_date,'%e/%c/%Y') as date, Ra.rank as rank 
FROM resource R INNER JOIN 
    resource_ranking Ra 
    ON R.ref = Ra.ref_id INNER JOIN 
    resource_rating Rr 
    ON R.ref = Rr.resource_id 
ORDER BY Ra.rank 
limit 2 

我不知道的額外order by條款是什麼。

如果您學會格式化查詢以使它們可讀,那麼您將更容易找到語法錯​​誤。

+0

讓我檢查。請... – Vasanth

+0

非常感謝你...... :) – Vasanth

0

的錯誤是在這裏:

INNER JOIN resource_ranking Ra ON R.ref = Ra.ref_id 
ORDER BY Ra.rank limit 2 
INNER JOIN resource_rating Rr ON R.ref = Rr.resource_id 
ORDER BY Rr.rating DESC 

SELECT語句中只能有一個ORDER BY子句,而且它必須是語句中的最後一個子句(ORDER BY必須在年底):

SELECT .... 
FROM table1 
JOIN table2 ON .... 
JOIN ...... 
WHERE ... 
ORDER BY ... 
0
 
(SELECT R.ref as ref, R.field8, R.file_extension, Rr.rating, DATE_FORMAT(R.creation_date,'%e/%c/%Y') as date, Ra.rank as rank FROM resource R 
    INNER JOIN resource_ranking Ra ON R.ref = Ra.ref_id 
    INNER JOIN resource_rating Rr ON R.ref = Rr.resource_id 
ORDER BY Ra.rank limit 2) 
UNION ALL 
    (SELECT R.ref as ref, R.field8, R.file_extension, Rr.rating, DATE_FORMAT(R.creation_date,'%e/%c/%Y') as date, '99' as rank FROM resource R 
    LEFT JOIN (SELECT ref_id FROM resource_ranking ORDER BY rank LIMIT 2) AS B ON R.ref = B.ref_id 
    INNER JOIN collection_resource C ON R.ref = C.resource 
    INNER JOIN resource_rating Rr ON R.ref = Rr.resource_id 
    WHERE B.ref_id IS NULL AND Rr.user_id = 1 
    AND R.ref != '-1' AND C.collection = 1) 
    ORDER BY rank ASC, ref DESC LIMIT 0, 8