所以,我得到这个错误信息:我有一个大的查询,我该如何调试?
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