我有两个非常相似的表。例如,假设每行有两个ID号和一个数据值。第一个ID号可以出现一次,两次或不包含,第二个ID号可以是1或-1。数据值并不重要,但是对于本示例而言,我们将其说成是整数。对于每对ID号,只能有一个数据值,因此,如果我有一个ID为10和1的数据点,则不会再有另一个具有不同数据值的10和1行。同样,在另一个表中,ID为10和1的数据点将与第一个表相同。我希望能够选择两个表中都存在的行,以便更改两个表中所有行中的数据值。到目前为止,我对MySQL的命令如下:
SELECT DISTINCT * FROM schema.table1
WHERE EXISTS (SELECT * from schema.table1
WHERE schema.table1.ID1 = schema.table2.ID1
and schema.table1.ID2 = schema.table2.ID2);
我希望能够让此代码选择table1中同样在table2中的所有行,但允许我编辑table1的值。
我了解通过创建两个表的并集,可以看到两个表中都存在的行,但是如果我更改了合并集中的值,是否可以对实际数据值进行更改?例如,如果我这样做了:
SELECT DISTINCT * FROM schema.table1 inner join schema.table2
WHERE schema.table1.ID1 = schema.table2.ID1
schema.table1.ID2 = schema.table2.ID2;
如果我在从该查询获得的行上调用UPDATE
,则将更改table1 / table2中的实际值,还是仅在动态内存中创建此并集,而只是更改要删除的值查询结束时?
答案 0 :(得分:0)
更新如下:
UPDATE table1 SET data = whateverupdate
WHERE ID1 IN (SELECT ID1 from schema.table1
WHERE schema.table1.ID1 = schema.table2.ID1
and schema.table1.ID2 = schema.table2.ID2);
在内部选择语句中,您无法执行select *
,而必须选择特定的列。这应该行得通,因为您的内部select查找有问题的行并将其提供给您的update语句。就是说,您的内部选择必须返回所需的正确行,否则将更新错误的行。希望这会有所帮助。