我有一个连接表叫carriers_rects
,看起来像这样:mysql UPDATE说列不能为空。为什么它是空的?
+------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------------+------+-----+---------+----------------+
| id | int(11) unsigned | NO | PRI | NULL | auto_increment |
| carrier_id | int(11) unsigned | NO | | NULL | |
| rect_id | int(11) unsigned | NO | | NULL | |
+------------+------------------+------+-----+---------+----------------+
我也有一个rects
表看起来像这样:
+---------+-------------+------+-----+----------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+----------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(54) | NO | | new rect | |
| width | varchar(54) | NO | | NULL | |
| length | varchar(54) | NO | | NULL | |
| rounded | tinyint(1) | NO | | NULL | |
| xx | varchar(54) | NO | | NULL | |
| yy | varchar(54) | NO | | NULL | |
| height | varchar(54) | NO | | NULL | |
+---------+-------------+------+-----+----------+----------------+
我想一个case_id
列添加到rects
和只是使其成为one-to-many
关系并杀死carriers_rects
表。我们正在移动我们的数据库,我们从未使用过many-to-many
关系。
所以我加入了case_id
列rects
:
alter table rects add case_id int(11) not null;
然后我尝试了所有case_id
的,将匹配来自carriers_rects
表以更新rects的case_id
。
update rects set case_id = (select carrier_id from carriers_rects where rect_id = id);
我得到column case_id cannot be null
。
我测试过,看看有没有空位,我似乎找不到任何。
select * from (select * from carriers_rects where rect_id IN(select id from rects)) `b` where id is null;
我也尝试了另一种方式,因为老实说我有点困惑。
select id from rects where id IN(select rect_id from carriers_rects)
显然我不是sql
天才。但是很想在这里接受教育。 不知道为什么我得到上面提到的错误。
我在尝试时仍然遇到同样的错误。尽管这听起来很不错, – Johnston
@Johnston这意味着你有'rects.id'不存在于'carriers_rects'表中。你可以使用@Rahul的JOIN语法,或者将条件添加到这个UPDATE中:'WHERE EXISTS(从carrier_rects中选择carrier_id,其中rect_id = rects.id)' – valex
下面我的查询不会测试吗?这就是我的想法,所以我写了这些查询来测试它,它听起来并不像它有任何问题。 – Johnston