我使用MySQL数据库,并且想根据另一个字段更新表中的某个字段。类似于:
UPDATE table1
SET field1 = table2.id
WHERE field2 IN (
SELECT table2.name
FROM table2
);
我知道这个查询不会起作用,但这是一个想法。它有可能实现吗?
我使用MySQL数据库,并且想根据另一个字段更新表中的某个字段。类似于:
UPDATE table1
SET field1 = table2.id
WHERE field2 IN (
SELECT table2.name
FROM table2
);
您可以使用以下方式作为相关子查询。这假定将返回完全匹配的值。如果返回多个匹配值,它将引发错误,如果返回零个,则将字段设置为空。如果不希望出现最后一种行为,则需要使用where
子句。
UPDATE table1
SET field1 = (SELECT DISTINCT table2.ValueColumn
FROM table2
WHERE table2.JoinColumn = table1.JoinColumn)
编辑
要查看具有0或多个匹配项的记录,您可以使用以下方法:
SELECT table1.JoinColumn, COUNT(DISTINCT table2.ValueColumn)
FROM table1
LEFT JOIN table2
ON table2.JoinColumn = table1.JoinColumn
GROUP BY table1.JoinColumn
HAVING COUNT(DISTINCT table2.ValueColumn) <> 1
MySQL返回了一个空结果集(即零行)。 (查询耗时0.1746秒)
- Nicolas