我们的网站有房源。我们使用一个连接表具有以下结构为我们的会员与这些不同的房源连接:使用自我加入困难的MySQL更新查询
CREATE TABLE `connections` (
`cid1` int(9) unsigned NOT NULL DEFAULT '0',
`cid2` int(9) unsigned NOT NULL DEFAULT '0',
`type` char(2) NOT NULL,
`created` datetime DEFAULT NULL,
`updated` datetime DEFAULT NULL,
PRIMARY KEY (`cid1`,`cid2`,`type`,`cid3`),
KEY `cid1` (`cid1`,`type`),
KEY `cid2` (`cid2`,`type`)
);
,我们遇到的问题是,当我们要重复的房源从时间相结合,我们也需要更新我们的成员连接并已使用下面的查询,如果一个部件连接到两个上市打破:
update connections set cid2=100000
where type IN ('MC','MT','MW') AND cid2=100001;
我无法弄清楚是怎么做到这将解决这个问题的情况如下:
update connections set cid2=100000
where type IN ('MC','MT','MW') AND cid2=100001 AND cid1 NOT IN (
select cid1 from connections
where type IN ('MC','MT','MW') AND cid2=100000
);
当我试图运行查询,我得到以下错误:
ERROR 1093 (HY000): You can't specify target table 'connections' for update in FROM clause
下面是一些样本数据。注意为CID1更新冲突= 10025925
+----------+--------+------+---------------------+---------------------+
| cid1 | cid2 | type | created | updated |
+----------+--------+------+---------------------+---------------------+
| 10010388 | 100000 | MC | 2010-08-05 18:04:51 | 2011-06-16 16:26:17 |
| 10025925 | 100000 | MC | 2010-10-31 09:21:25 | 2010-10-31 16:21:25 |
| 10027662 | 100000 | MC | 2011-06-13 16:31:12 | NULL |
| 10038375 | 100000 | MW | 2011-02-05 05:32:35 | 2011-02-05 19:51:58 |
| 10065771 | 100000 | MW | 2011-04-24 17:06:35 | NULL |
| 10025925 | 100001 | MC | 2010-10-31 09:21:45 | 2010-10-31 16:21:45 |
| 10034884 | 100001 | MC | 2011-01-20 18:54:51 | NULL |
| 10038375 | 100001 | MC | 2011-02-04 05:00:35 | NULL |
| 10041989 | 100001 | MC | 2011-02-26 09:33:18 | NULL |
| 10038259 | 100001 | MC | 2011-05-07 13:34:20 | NULL |
| 10027662 | 100001 | MC | 2011-06-13 16:33:54 | NULL |
| 10030855 | 100001 | MT | 2010-12-31 20:40:18 | NULL |
| 10038375 | 100001 | MT | 2011-02-04 05:00:36 | NULL |
+----------+--------+------+---------------------+---------------------+
我希望有人可以建议运行上述查询正确的方式。提前致谢!
有时最好的解决方案是简单的。我在update语句中添加了ignore,然后用旧的cid2删除了任何剩余的行。非常感谢你的帮助! – 2011-06-17 06:18:11
我很开心,它为你工作:-) – Abhay 2011-06-17 07:40:30