0

複数のテーブルにまたがる大量のデータを保持する mysql テーブルがあります。したがって、すべてを理解するには、UNION句を使用するのが最善の策だと思いますが、複数の値を持つものとnullのものがあるため、結果がどのテーブルからのものかを知りたいです。

次のSQLは機能していないように見えますが、何が問題なのかわかりません。

 (SELECT *, `2` AS 'cat' from `2` where `recid` = 'cneta0ld00ah')
  UNION
 (SELECT *, `3` AS 'cat' from `3` where `recid` = 'cneta0ld00ah')
  UNION
 (SELECT *, `4` AS 'cat' from `4` where `recid` = 'cneta0ld00ah')
  UNION
 (SELECT *, `5` AS 'cat' from `5` where `recid` = 'cneta0ld00ah')

すべてのテーブルは次のように表示され、1、2、3、4 などの名前が付けられます。

 recid         | item
 -------------------------
 cneta0ld00ah  |   1
 cneta0ld00ab  |   1
 cneta0ld00ad  |   3

データを変換して抽出しようとしている非常に古いデータベースからのインポートであるため、テーブルの名前を変更できません。

「table-name」AS「cat」なしで実行すると、正常に実行されます。テーブル名を追加しようとするとすぐに、エラーがスローされます

Unknown column '2' in 'field list'

2 は列名だと思っているようですが?

4

3 に答える 3

3

問題は、「テーブル名」「AS」「猫」の周りにあるバックティックです。バックティックは、文字列ではなく、テーブル名と列名を引用するためのものです。代わりに一重引用符を使用する必要があります。

 (SELECT *, '2' AS 'cat' from `2` where `recid` = 'cneta0ld00ah')
  UNION
 (SELECT *, '3' AS 'cat' from `3` where `recid` = 'cneta0ld00ah')
  UNION
 (SELECT *, '4' AS 'cat' from `4` where `recid` = 'cneta0ld00ah')
  UNION
 (SELECT *, '5' AS 'cat' from `5` where `recid` = 'cneta0ld00ah')
于 2012-09-10T13:51:44.833 に答える
0

UNION ALLの代わりに使用しUNIONます。

(SELECT *, `2` AS 'cat' from `2` where `recid` = 'cneta0ld00ah')
 UNION ALL
(SELECT *, `3` AS 'cat' from `3` where `recid` = 'cneta0ld00ah')
 UNION ALL
(SELECT *, `4` AS 'cat' from `4` where `recid` = 'cneta0ld00ah')
 UNION ALL
(SELECT *, `5` AS 'cat' from `5` where `recid` = 'cneta0ld00ah')

UNIONJOIN個別の値のみが選択されるため、 と同様に、関連情報を選択するときに使用する必要があります。UNION ALL重複を削除しないため、個別の値を見つけるのに必要な時間も短縮されます。

また、 ではなく、常に列リストを指定する必要がありますSELECT *

于 2012-09-10T13:49:37.270 に答える
0

すべてのテーブルが同じ構造を持っていますか? でUnion、でselect *、彼らはする必要があります。

その場合は、ブラケットを取り外してみてください

SELECT recid, item, `2` AS `cat` from `2` where `recid` = 'cneta0ld00ah'
UNION 
SELECT recid, item, `3` AS `cat` from `3` where `recid` = 'cneta0ld00ah'
于 2012-09-10T13:35:09.277 に答える