2011-09-10 66 views
0

我想寫一個額外的查詢給phpbb3 karma mod,它檢查用戶在沒有給其他3人報業之前不能給同一個人報業。但我收到錯誤在我的SQL語法...MySQL「NOT IN」/「LEFT JOIN」給出錯誤

我檢查thisthis鏈接和查詢我寫看起來遵循

SELECT * 
FROM phpbb_karma AS out 
WHERE out.poster_id = 134 
AND out.poster_id 
NOT IN 
(SELECT k.karma_id, k.user_id, k.poster_id 
FROM phpbb_karma AS k 
WHERE user_id = 108 
ORDER BY k.karma_id DESC LIMIT 3) 

所以,我的內心查詢獲取最後3人(poster_id )他(user_id)給了業力。這個查詢本身可以工作,但與我的外部查詢一起,它給我錯誤

1064 - 您的SQL語法有錯誤;檢查 對應於你的MySQL服務器版本正確的語法使用手動 附近「在哪裏out.poster_id = 134和out.poster_id NOT IN(SELECT k.karma_id,區」在第2行

在我的外部查詢中,我寫道將會收到業力的人是134,並且他不能出現在我的內部查詢結果中

該查詢有什麼錯誤?錯誤是否真的在第二行?

我用LEFT JOIN寫了同樣的查詢,但它給了我相同的查詢語法錯誤

SELECT * 
FROM phpbb_karma AS out 
LEFT JOIN phpbb_karma AS in 
ON in.poster_id = out.poster_id 
WHERE in.poster_id = 134 AND in.poster_id IS NULL 

1064 - 你有一個錯誤的SQL語法;檢查 對應於你的MySQL服務器版本正確的語法使用 近「了LEFT JOIN phpbb_karma如在in.poster_id = out.poster_id WHERE in.poster_」第2行

的MySQL手冊版本是MySQL client version: mysqlnd 5.0.7-dev - 091210 - $Revision: 304625 $,但我不認爲問題出現在版本中,因爲左連接不起作用要麼

回答

0

out是MySQL中的關鍵字。你可以通過命名其他別名或在out左右反斜槓來解決這個問題。

+0

也是如此別名'in' –

0

只需放回outin。看起來他們是在MySQL

1
使用保留字作爲別名,你不能使用 NOT ININ與子選擇返回

除了多於一列。

您基本上告訴MySQL將來自poster_id的單個值與三個不同的值進行比較。現在應該選哪一個?

一旦你弄清了別名的問題,你需要從子選擇中刪除兩列。

根據您的命名模式我假設你真的想

NOT IN (SELECT k.karma_id FROM phpbb_karma ....) 

代替。

+0

謝謝你,它工作在5分鐘內NOWS :) – Skyzer

+0

呃,didnt編輯,所以我寫的答覆是現在的工作,當我在內部查詢忽略LIMIT 3否則它說,該版本的MySQL不還支持'LIMIT & IN/ALL/ANY/SOME子查詢' – Skyzer