您可以使用多臺delete
聲明以left outer join
和重點不匹配行是這樣的:
delete u from Users as u
left outer join Subscriptionoffering as so
on so.userid = u.userid
where so.userid is null;
這裏是一些測試代碼來證明它:
mysql> create table Users (userid int unsigned primary key auto_increment) engine = innodb;
Query OK, 0 rows affected (0.43 sec)
mysql> create table Subscriptionoffering (userid int unsigned not null, subscriptionname varchar(32) not null, foreign key (userid) references Users(userid)) engine = innodb;
Query OK, 0 rows affected (0.41 sec)
mysql> insert into Users() values(),(),(),(),();
Query OK, 5 rows affected (0.38 sec)
Records: 5 Duplicates: 0 Warnings: 0
mysql> select * from Users;
+--------+
| userid |
+--------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
+--------+
5 rows in set (0.00 sec)
mysql> insert into Subscriptionoffering (userid, subscriptionname) values (1, 'One'), (3, 'Three'), (5, 'Five');
Query OK, 3 rows affected (0.31 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from Subscriptionoffering;
+--------+------------------+
| userid | subscriptionname |
+--------+------------------+
| 1 | One |
| 3 | Three |
| 5 | Five |
+--------+------------------+
3 rows in set (0.00 sec)
mysql> delete u from Users as u
-> left outer join Subscriptionoffering as so
-> on so.userid = u.userid
-> where so.userid is null;
Query OK, 2 rows affected (0.36 sec)
mysql> select * from Users;
+--------+
| userid |
+--------+
| 1 |
| 3 |
| 5 |
+--------+
3 rows in set (0.00 sec)
謝謝,原因:-)但我看到我忘記了一種關係。它是: 用戶{** userid **,名稱} subscriptionoffering {** subscriptionid **} usersub {** userid **,** subscriptionid **} 如何獲得此額外關係? – Mestika 2010-04-12 06:50:50
對不起,自己找:-) 再次感謝 – Mestika 2010-04-12 06:52:24
編輯的答案爲正確的用戶名,thx – Axarydax 2010-04-12 06:53:03