1. ホーム
  2. sql

[解決済み】使用されるSELECT文は列の数が異なる(REDUX!)

2022-02-19 08:54:02

質問

これと似たような質問がもう一つ出ているのですが、答えになっていないようです 私の という質問をします。

私の質問はこうです:なぜこのエラーが返ってくるのでしょうか? ERROR 1222 (21000): The used SELECT statements have a different number of columns 以下のSQLから

SELECT * FROM friends
LEFT JOIN users AS u1 ON users.uid = friends.fid1
LEFT JOIN users AS u2 ON users.uid = friends.fid2
WHERE (friends.fid1 = 1) AND (friends.fid2 > 1)
UNION SELECT fid2 FROM friends
WHERE (friends.fid2  = 1) AND (friends.fid1 < 1)
ORDER BY RAND()
LIMIT 6;

以下は {コード :

{{コード

以下は {コード :

{{コード

こちらも何かおかしなことがあれば、お気軽にご意見をお寄せください。しこりを取るよ。

解決方法は?

UNION ( {コード と {コード ) は、UNIONされるすべてのクエリが持っていることを要求します。

  1. SELECT句のカラム数が同じであること。
  2. 列のデータ型は各位置で一致しなければならない

あなたのクエリには

users

私が持っている一番簡単な書き直しは

+------------+---------------+------+-----+---------+----------------+
| Field      | Type          | Null | Key | Default | Extra          |
+------------+---------------+------+-----+---------+----------------+
| uid        | int(11)       | NO   | PRI | NULL    | auto_increment |
| first_name | varchar(50)   | NO   |     | NULL    |                |
| last_name  | varchar(50)   | NO   |     | NULL    |                |
| email      | varchar(128)  | NO   | UNI | NULL    |                |
| mid        | varchar(40)   | NO   |     | NULL    |                |
| active     | enum('N','Y') | NO   |     | NULL    |                |
| password   | varchar(64)   | NO   |     | NULL    |                |
| sex        | enum('M','F') | YES  |     | NULL    |                |
| created    | datetime      | YES  |     | NULL    |                |
| last_login | datetime      | YES  |     | NULL    |                |
| pro        | enum('N','Y') | NO   |     | NULL    |                |
+------------+---------------+------+-----+---------+----------------+

にLEFT JOINしていますね。 friends テーブルを 2 回使用したが、情報を使用していないように見える。