したがって、次のエラーメッセージが表示されます。
EDT ERROR: syntax error at or near "union" at character 436
問題のクエリは、すべてUNION ALLで接続された12個の小さなクエリで構成される大きなクエリであり、各小さなクエリには2つの内部結合ステートメントがあります。だから、次のようなもの:
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のように記述されていません。
クイック編集の質問:( '2'、 '3'、 '4')のtable2.groupidはどういう意味ですか?
小さなクエリを1つずつチェックしました。それぞれが機能し、結果を返しますが、何らかの理由で結果は常に空になります(ただし、一部のPHPコードがこのクエリを生成したため、ログインしているユーザーに依存する場合としない場合があります)。
結果自体に関しては、それらのほとんどは次のようになります(ただし、水平に配置されています)。
id(integer)
name (character varying(80))
groupname (character varying(100))
type (unknown)
結果の違いは2つあります。1)ほとんどの結果には同じフィールド名が含まれていますが、かなりの数の結果のフィールド長が異なります。文字が変化する(80)と言う人もいれば、文字が変化する(100)と言う人もいるように、これが実際にフィールドの長さでない場合は修正してください。2)2つのクエリには異なるフィールドが含まれていますが、idフィールドのみが異なります。これは、「asid」の部分がないことが原因である可能性があります。
UNION ALLの要件が何であるかはよくわかりませんが、私が思うに、すべてのフィールドが同じである場合にのみ機能することを意味しますが、そのファンキーな番号(括弧内の番号)が変更された場合は、同じ名前のフィールドでも異なると見なされますか?
また、奇妙なことに、一部のクエリがまったく同じフィールドを同じフィールド長で返したため、それらのクエリのみをUNION ALLしようとしましたが、運が悪かったため、UNIONで構文エラーが発生しました。
私が言及しなければならないもう1つの重要なことは、DBは以前はMySQLでしたが、PostGreSQLに変更したため、このバグは変更の結果である可能性があります(つまり、MySQLでは機能するがPostGresでは機能しないコード)。
御時間ありがとうございます。