1
我的问题是使用其他表中的数据更新一个表中的数据。我的SELECT查询获取所有需要的行,但UPDATE查询不影响任何内容。哪里不对? 这里是SELECT查询:UPDATE不影响某些行
SELECT
t1.id,
COUNT(*)
FROM table_1 as t1
LEFT JOIN table_2 as t2
ON t1.system_id = t2.system_id
AND t1.tenant_id = t2.tenant_id
AND name LIKE '%<ohne>'
AND t2.created_by_id = '1'
WHERE t1.system_project_id IS NULL
这里是UDATE查询
UPDATE table_1 as t1
LEFT JOIN table_2 as t2
ON t1.system_id = t2.system_id
AND t1.tenant_id = t2.tenant_id
AND name LIKE '%<ohne>'
AND t2.created_by_id = '1'
SET t1.system_project_id = t2.id
WHERE t1.system_project_id IS NULL
表stucture:
的样本数据CREATE TABLE table_1 (
`id` int(11) NOT NULL AUTO_INCREMENT,
`tenant_id` int(11) DEFAULT NULL,
`system_id` int(11) NOT NULL,
`system_project_id` int(11) DEFAULT NULL,
)
CREATE TABLE `table_2` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`created_by_id` int(11) NOT NULL,
`system_id` int(11) NOT NULL,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`tenant_id` int(11) DEFAULT NULL,
)
:
更新后table_1:
id: 1
tenant_id:1
system_id:1
system_project_id:NULL
table2:
id:1
tenant_id:1
system_id:1
name:blabla<ohne>
created_by_id:1
预期的数据:
table_1:
id: 1
tenant_id:1
system_id:1
system_project_id:1
我稍微更新我的查询,所以现在的样子:
IF EXISTS (
SELECT t2.id FROM table_1 as t1
LEFT JOIN table_2 as t2 ON t1.system_id = t2.system_id
AND t1.tenant_id = t2.tenant_id AND name LIKE '%<ohne>' AND syp.created_by_id = '1'
WHERE t1.system_project_id IS NULL
)
THEN
UPDATE table_1 as t1_1
SET t1.system_project_id = t2.id
FROM table_2 as syp WHERE t1_1.system_id = t2.system_id
AND t1_1.tenant_id = t2.tenant_id AND name LIKE '%<ohne>' AND t2.created_by_id = '1'
AND t1_1.system_project_id IS NULL;
ELSE
INSERT INTO table_2 (created_by_id, updated_by_id, system_id, created_at, updated_at, name, tenant_id)
SELECT 1,1, t1_1.system_id, NOW(), NOW(), CONCAT(t3.name,'<ohne>'), t1_1.tenant_id
FROM table_1 as t1_1
LEFT JOIN table_3 as t3 ON rem.system_id = t3.id
WHERE t1_1.system_project_id IS NULL;
END IF;
DUT它仍然无法正常工作。 table_3只是一个获取'name'的连接表。
据推测,'t2.id'总是'NULL'当't1.system_project_id IS NULL'。 – 2014-09-24 14:31:51
选择t1.id但在更新中设置t2.id?你可以选择t2.id,查看计数 – 2014-09-24 14:39:29
是的,选择t2.id与SELECT查询返回NULL - 所以,这是一个任务,完成缺少system_project_id的所有t1行。 – Kamil 2014-09-24 14:46:39