Итак, я получаю это сообщение об ошибке:
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 также одинаковы, я думаю.
Быстрый вопрос (я все еще новичок во всем этом):
Что означает «Лиды» как тип? В отличие от других операторов, предшествующих AS, это не написано как table.something.
Вопрос быстрого редактирования: что означает table2.groupid в ('2','3','4')?
Я проверил каждый небольшой запрос один за другим, каждый из них работает и возвращает результат, хотя результаты всегда пусты по какой-то причине (хотя это может зависеть или не зависеть от пользователя, вошедшего в систему, поскольку некоторый код PHP сгенерировал этот запрос).
Что касается самих результатов, то большинство из них выглядят примерно так (правда, расположены они горизонтально):
id(integer)
name (character varying(80))
groupname (character varying(100))
type (unknown)
Разница в результатах двоякая: 1) Большинство результатов содержат одинаковые имена полей, но многие из них имеют разную длину полей. Как некоторые говорят, что символы варьируются (80), в то время как другие говорят, что символы варьируются (100), пожалуйста, поправьте меня, если это на самом деле не длина поля. 2) 2 запроса содержат разные поля, но отличается только поле id, и, вероятно, это связано с тем, что в них нет части «как id».
Я не совсем уверен в том, каковы требования UNION ALL, но если я думаю, что он должен работать только в том случае, если все поля одинаковы, но если это причудливое число изменится (тот, что в скобках), то поля считаются разными, даже если они имеют одинаковое имя?
Кроме того, странно то, что некоторые запросы возвращали одни и те же поля с одинаковой длиной поля, поэтому я попытался ОБЪЕДИНИТЬ ВСЕ только эти запросы, но безуспешно, все еще получая синтаксическую ошибку в ОБЪЕДИНЕНИИ.
Еще одна важная вещь, которую я должен упомянуть, это то, что БД раньше была MySQL, но мы перешли на PostGreSQL, поэтому эта ошибка может быть результатом изменения (то есть код, который может работать в MySQL, но не в PostGres).
Спасибо за ваше время.