因此,我收到此错误消息:
EDT ERROR: syntax error at or near "union" at character 436
有问题的查询是一个大查询,由 12 个较小的查询组成,所有查询都通过 UNION ALL 连接在一起,每个小查询都有两个内部连接语句。所以,像:
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....
请注意,table2 和 table3 在每个查询中都是相同的表,并且我认为 table2 和 table3 中的字段也相同。
快速提问(我对这一切还是有点陌生):
“Leads”作为 Type 是什么意思?与 AS 之前的其他语句不同,这个语句不像 table.something 那样写。
快速编辑问题:table2.groupid in ('2','3','4') 是什么意思?
我一一检查了每个小查询,每个小查询都有效并返回一个结果,尽管由于某种原因结果总是空的(这可能取决于或可能不取决于登录的用户,因为一些 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 中不工作的代码)。
谢谢你的时间。