UNIONを使用すると、「ERROR 1222(21000):使用されているSELECTステートメントの列数が異なります」というメッセージが表示されます。 MySQLクエリの句。これは、各SELECTによって返される列の数が原因である可能性があります。 ステートメントが異なります。
たとえば、最初のSELECT ステートメントは2つの列を返す可能性がありますが、2番目のSELECT ステートメントは3を返します。
この問題を修正するには、両方のSELECTを確認してください ステートメントは同じ数の列を返します。
エラーを生成するコードの例を次に示します。
SELECT TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students; 結果:
ERROR 1222 (21000): The used SELECT statements have a different number of columns
ここでは、最初のSELECT ステートメントは1つの列を返します(TeacherName )、ただし2番目のSELECT ステートメントは2つの列を返します(StudentId およびStudentName 。
この問題を修正する方法は、両方のSELECTを確認することです。 ステートメントは同じ数の列を返します
したがって、上記の例を使用すると、2番目のSELECTから余分な列を削除できます。 ステートメント:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students; 結果:
+-------------+ | TeacherName | +-------------+ | Warren | | Ben | | Cathy | | Bill | | Faye | | Jet | | Spike | | Ein | +-------------+
または、最初のSELECTに別の列を追加することもできます ステートメント:
SELECT TeacherId, TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students; 結果:
+-----------+-------------+ | TeacherId | TeacherName | +-----------+-------------+ | 1 | Warren | | 2 | Ben | | 3 | Cathy | | 4 | Cathy | | 5 | Bill | | 6 | Bill | | 1 | Faye | | 2 | Jet | | 3 | Spike | | 4 | Ein | | 5 | Warren | +-----------+-------------+
選択したオプションによって、異なる結果が得られる可能性があることに注意してください。これは、UNION デフォルトで個別の行を返します。別の列を追加すると、追加の列の値によっては、以前に複製された行が一意の行になる可能性があります。
UNION ALLも使用できます 、重複する値を返します:
SELECT TeacherId, TeacherName FROM Teachers
UNION ALL
SELECT StudentId, StudentName FROM Students; 結果:
+-----------+-------------+ | TeacherId | TeacherName | +-----------+-------------+ | 1 | Warren | | 2 | Ben | | 3 | Cathy | | 4 | Cathy | | 5 | Bill | | 6 | Bill | | 1 | Faye | | 2 | Jet | | 3 | Spike | | 4 | Ein | | 5 | Warren | | 6 | Bill | +-----------+-------------+