2017-07-01 12 views
0

をエントリを選択:MSGIDは、テーブル「USER1」または「user2が」ではありません、私はテーブルからすべてのエントリを選択したいMySQLの - 私は3つのテーブル持って指定されたテーブルに存在しない

mysql> describe messages; 
+--------+--------------+------+-----+---------+-------+ 
| Field | Type   | Null | Key | Default | Extra | 
+--------+--------------+------+-----+---------+-------+ 
| msgID | varchar(36) | YES |  | NULL |  | 
| time | mediumtext | YES |  | NULL |  | 
| sender | varchar(10) | YES |  | NULL |  | 
| hash | varchar(44) | YES |  | NULL |  | 
| msg | varchar(400) | YES |  | NULL |  | 
+--------+--------------+------+-----+---------+-------+ 

mysql> describe user1; 
+-------+-------------+------+-----+---------+-------+ 
| Field | Type  | Null | Key | Default | Extra | 
+-------+-------------+------+-----+---------+-------+ 
| msgID | varchar(36) | YES |  | NULL |  | 
+-------+-------------+------+-----+---------+-------+ 

mysql> describe user2; 
+-------+-------------+------+-----+---------+-------+ 
| Field | Type  | Null | Key | Default | Extra | 
+-------+-------------+------+-----+---------+-------+ 
| msgID | varchar(36) | YES |  | NULL |  | 
+-------+-------------+------+-----+---------+-------+ 

を「メッセージ」。

私はこの試みた:

mysql> select * from messages where msgID not in 
(select msgID from user1) 
union 
(select msgID from user2); 

をしかし、それは、次のエラーが発生しました:

ERROR 1222 (21000): The used SELECT statements have a different number 
of columns 

私は 'MSGID' で*を置き換えますが、結果は正しくありませんでした。

どうすればよいですか?

「ユーザー」テーブルの数は、2つ以上になる可能性があります。そのためには、解決策が十分に柔軟でなければなりません。

答えて

1

これを試してみてください(のみ変更グループ):

あなたの元のクエリは次のように解釈された
mysql> select * from messages where msgID not in (
    select msgID from user1 
    union 
    select msgID from user2 
) 

select * from messages where msgID not in (select msgID from user1) 

union 

(select msgID from user2); 

そしてmessagesので、あなたがusers2から選択している単一のものよりも多くの列を持っています、それはどのように "組合"を知らなかった

関連する問題