【发布时间】:2018-03-08 06:14:27
【问题描述】:
我需要一对一地链接两个表,但是要比较和链接的值不是唯一的。
我找不到办法。例如,我添加了一个非常简单的版本。
CREATE TABLE `T1` (
`id` int(6) unsigned NOT NULL,
`cmp` int(3) NOT NULL,
`uniqueT2Id` int(3) unsigned,
PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `T2` (
`id` int(6) unsigned NOT NULL,
`cmp` int(3) NOT NULL,
PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;
INSERT INTO `T1` (`id`, `cmp`, `uniqueT2Id`) VALUES
('1', '1', NULL),
('2', '1', NULL),
('3', '2', NULL),
('4', '3', NULL),
('5', '1', NULL);
INSERT INTO `T2` (`id`, `cmp`) VALUES
('1', '1'),
('2', '1'),
('3', '1'),
('4', '2'),
('5', '3');
UPDATE T1 SET uniqueT2Id=
(SELECT id FROM T2 WHERE T2.cmp=T1.cmp AND
id NOT IN (SELECT * FROM
(SELECT uniqueT2Id FROM T1 WHERE uniqueT2Id IS NOT NULL) X)
ORDER BY id ASC LIMIT 1);
SELECT * FROM T1;
http://sqlfiddle.com/#!9/3bab7c/2/0
结果是
id cmp uniqueT2Id
1 1 1
2 1 1
3 2 4
4 3 5
5 1 1
我希望它是
id rev uniqueT2Id
1 1 1
2 1 2
3 2 4
4 3 5
5 1 3
在更新中,我尝试选择一个尚未使用的 ID,但这显然不起作用。有谁知道在 MySQL 中执行此操作的方法,最好不使用 PHP?
【问题讨论】:
-
尽管您向我们提供了所有信息,但我实际上并没有看到明确的问题陈述。尤其是这两张表的连接逻辑是什么?
-
实际的表格和情况非常复杂,这就是我大大简化的原因。粗略地说,逻辑是我需要一个一对一的关系并获得一个一对多的关系。甚至更简单:我需要将每条记录中的列更新为唯一值(在查找表中),但我没有得到唯一值。
-
或者更清楚:查询的“NOT EXISTS”部分不起作用,我该如何解决这个问题?
-
“不在”,抱歉。
-
你的问题还不清楚。如果你无法清楚地表达连接逻辑,那你怎么能指望我们这样做呢?