Mysql - 选择指定表中不存在的条目

时间:2017-07-01 13:30:25

标签: mysql sql

我有三张桌子:

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    |       |
+-------+-------------+------+-----+---------+-------+

我想从表格'消息'中选择所有条目。 msgID不在表格中的位置' user1'或者' user2'。

我试过了:

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 个答案:

答案 0 :(得分: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中选择的单个列,因此它不知道如何“联合”