Итак, я получаю это сообщение об ошибке:
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, и это, вероятно, потому, что они не имеют части «as id».
Я не совсем уверен, каковы требования UNION ALL, но если я думаю, он должен работать, только если все поля одинаковы, но если это забавное число меняется (то, которое в скобках), тогда поля считаются разными, даже если они имеют одинаковые имена?
Кроме того, странно то, что некоторые запросы возвращали одинаковые поля с одинаковой длиной, поэтому я попытался UNION ALL только для этих запросов, но, к счастью, синтаксическая ошибка в UNION все еще получалась.
Еще одна важная вещь, которую я должен упомянуть, это то, что БД раньше была MySQL, но мы перешли на PostGreSQL, поэтому эта ошибка может быть результатом изменения (то есть кода, который может работать в MySQL, но не в PostGres).
Спасибо за ваше время.