我有三张桌子:
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个,因此解决方案应该足够灵活。
答案 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
中选择的单个列,因此它不知道如何“联合”