0

したがって、次のエラーメッセージが表示されます。

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では機能しないコード)。

御時間ありがとうございます。

4

3 に答える 3

2

表示されるエラーは、ここで括弧が欠落していることが原因です。

...
LIMIT 5
UNION all 
...

マニュアル:

(括弧で囲まれORDER BYている場合は、部分式にLIMIT付加できます 。括弧がない場合、これらの句は、右側の入力式ではなく、の結果に適用されると見なされます。)UNION

後の例:

于 2011-09-21T17:51:02.307 に答える
2

"LIMIT xxx" 句を 1 つだけ指定できます。UNION の前ではなく、クエリの最後に。

于 2011-09-21T17:50:36.577 に答える
1

大きなクエリをデバッグする唯一の実際の方法は、クエリを理解できる部分に分割し、各部分式を個別にデバッグすることです。

  • それぞれが予想される行を示していますか?
  • 結果のフィールドと型は期待どおりですか?
  • の場合union、結果のフィールドと型は対応する他の部分式と正確に一致しますか?
于 2011-09-21T17:08:48.377 に答える