2012-01-21 69 views
0

這是SQL的錯誤:MySQL的語法錯誤,但一切似乎正確

Error: 1064 - 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 ') and (pi.perm_type='forum' and (pi.perm_2='*' OR pi.perm_2 LIKE '%,4,%')) and' at line 2 

這是SQL查詢:

SELECT t.tid AS id, t.title, t.last_poster_id AS id2,m.member_group_id, 
m.members_display_name AS statistic,pi.perm_2 FROM topics t LEFT JOIN members m ON (
m.member_id = t.last_poster_id) 
LEFT JOIN permission_index pi ON (pi.app='forums' AND pi.perm_type='forum' AND 
pi.perm_type_id=t.forum_id) WHERE t.forum_id NOT IN() AND (pi.perm_type='forum' AND (
pi.perm_2='*' OR pi.perm_2 LIKE '%,4,%')) AND t.approved=1 AND (t.moved_to='' OR 
t.moved_to IS NULL) ORDER BY t.last_post DESC LIMIT 0,11 

現在,這個查詢運行在我的MySQL本地安裝罰款(XAMPP )。

難道是不同的MySQL版本會導致此查詢中的SQL錯誤?那究竟是什麼造成了錯誤?

  1. 「LIKE」運算符?

  2. where子句中的嵌套語句? (之間())

  3. 還有別的嗎?

在此先感謝!

回答

4

您有一個空NOT IN

而且,你不需要的WHERE條件之一的圓周率,因爲它是在LEFT JOIN。但是,外部表pi上的WHERE中的LIKE過濾器會將其更改爲內部聯接。

所以,當你要注意格式,誒你需要這一點,並解決您的

SELECT 
    t.tid AS id, 
    t.title, 
    t.last_poster_id AS id2,m.member_group_id, 
    m.members_display_name AS statistic, 
    pi.perm_2 
FROM 
    topics t 
    LEFT JOIN 
    members m ON m.member_id = t.last_poster_id 
    LEFT JOIN 
    permission_index pi ON pi.app='forums' AND pi.perm_type='forum' AND 
            pi.perm_type_id=t.forum_id 
          AND 
          (pi.perm_2='*' OR pi.perm_2 LIKE '%,4,%') 
WHERE 
    -- t.forum_id NOT IN() -- error is here 
    -- AND 
    t.approved=1 
    AND 
    (
    t.moved_to='' OR t.moved_to IS NULL) 
ORDER BY 
    t.last_post DESC 
LIMIT 0,11 

容易得多?

+0

+1用於查找更多錯誤並暗示格式化。 – dgw

+0

非常感謝您的幫助! –

3
t.forum_id NOT IN() 

IN子句中沒有值。

+0

這修復了語法錯誤,但查詢仍然存在問題... – gbn

+0

@gbn您是對的。從MySQL找到指示的錯誤後,我停止搜索。 – dgw

0

我不熟悉您用於LIKE的語法。可能需要將它從LIKE'%,4,%'更改爲LIKE'%4%'。你試過這個嗎?

0

條件「t.forum_id NOT IN()」無效,因爲IN要求至少定義一個值。

相關問題