所以,我得到這個錯誤信息:我有一個大的查詢,我該如何調試?
EDT ERROR: syntax error at or near "union" at character 436
有問題的查詢是由與UNION連接在一起的所有12多個較小的查詢所有大型查詢,並且每個小查詢有兩個內部聯接語句。所以,像這樣:
SELECT table.someid as id
,table.lastname as name
,table2.groupname as groupname
, 'Leads ' as Type
from table
inner join table3 on table3.specificid = table.someid
INNER JOIN table2 on table3.specificid=table2.groupid
where table3.deleted=0
and table.someid > 0
and table2.groupid in ('2','3','4')
LIMIT 5
UNION all
query2....
注意,表2和表3是每個查詢相同的表,並從表2和表3中的字段也一樣,我想。
快速問題(我對這一切還是比較陌生):
'Leads'as Type是什麼意思?與AS之前的其他語句不同,這個語句不像table.something那樣寫。
快速編輯問題:('2','3','4')中的table2.groupid是什麼意思?
我逐個檢查了每個小查詢,每個查詢都工作並返回一個結果,雖然由於某種原因結果總是空的(這可能會也可能不依賴於登錄的用戶,因爲某些PHP代碼生成這個查詢)。
至於結果本身,大多是這個樣子(它們被佈置成水平雖然):
id(integer)
name (character varying(80))
groupname (character varying(100))
type (unknown)
在結果的差異有兩方面: 1)大多數結果都含有相同字段名稱,但其中不少字段長度不同。就像有些人會說字符變化(80),而其他人會說字符變化(100),如果這實際上不是字段長度,請糾正我。 2)2個查詢包含不同的字段,但只有id字段是不同的,這可能是因爲他們沒有「as id」部分。
我不太清楚UNION ALL的要求是什麼,但是如果我想,它只能用於所有字段相同的情況,但如果這個時髦數字發生變化(括號中的那個) ,那麼即使它們具有相同的名稱,這些字段被認爲是不同的?另外,奇怪的是,有些查詢返回了完全相同的字段,字段長度相同,所以我試圖UNION ALL只有那些查詢,但沒有運氣,UNION仍然有語法錯誤。
我應該提到的另一個重要的事情是,數據庫曾經是MySQL,但我們改爲PostGreSQL,所以這個錯誤可能是由於改變(即可能在MySQL中運行但在PostGres中不起作用的代碼)的結果。
謝謝你的時間。
你應該考慮的是審查你的表格。你說'請注意,table2和table3是每個查詢中的相同表,而且我認爲table2和table3中的字段也是相同的。我認爲,是一面紅旗。 – Taryn
在'select'子句中,'as'關鍵字命名一列。在你的情況下,你會在每行的Type列中得到'Leads'。 –
@bluefeet對不起,我不是很清楚,當我說我認爲字段相同時,我的意思是查詢對這些表使用相同的表和相同的字段(例如,每個查詢使用table3.specificid)。 – zermy