Mysql 在一个查询中检查多个数据
我有以下问题。我在数据库中有两个表——表1和表2Mysql 在一个查询中检查多个数据,mysql,sql,database,postgresql,Mysql,Sql,Database,Postgresql,我有以下问题。我在数据库中有两个表——表1和表2 Table1 id| val1| val2 -------------- 1 | 234 | 342 2 | 325 | 356 ... Table2 id | uid | val -------------- 1 | 5 | 234 2 | 6 | 362 3 | 5 | 123 如果表1中存在val,我想检查表2中的每条记录(table2.val=table1.va1或table2.val>table1.vall)。
Table1
id| val1| val2
--------------
1 | 234 | 342
2 | 325 | 356
...
Table2
id | uid | val
--------------
1 | 5 | 234
2 | 6 | 362
3 | 5 | 123
如果表1中存在val,我想检查表2中的每条记录(
table2.val=table1.va1或table2.val>table1.vall
)。
表1中约有200万条记录。在表2中有几千个。
如果查询结果为true,我想从表2中删除行
是否可以在一个查询中执行此操作?mysql还是postgresql
性能非常重要。假设(t2.val=t1.val1)或(t1.val2>t2.val)
条件:
delete t
from #table2 t
inner join #table1 t2
on t.val = t2.val or t2.val>t.val
delete table2
from table2 t2
inner join table1 t1 on (t2.val = t1.val1) or (t1.val2 > t2.val)
假设(t2.val=t1.val1)或(t1.val2>t2.val)
条件:
delete table2
from table2 t2
inner join table1 t1 on (t2.val = t1.val1) or (t1.val2 > t2.val)
假设
Table2
中的uid
在Table1
中引用id
(并且两个表都不包含空值),这将返回Table1
中满足存在条件的行:
SELECT *
FROM Table1
WHERE EXISTS (
SELECT *
FROM Table2
WHERE Table2.uid = Table1.id
AND (
Table2.val = Table1.val1
OR Table2.val > Table1.val2
)
);
假设
Table2
中的uid
在Table1
中引用id
(并且两个表都不包含空值),这将返回Table1
中满足存在条件的行:
SELECT *
FROM Table1
WHERE EXISTS (
SELECT *
FROM Table2
WHERE Table2.uid = Table1.id
AND (
Table2.val = Table1.val1
OR Table2.val > Table1.val2
)
);
对于表2中的每条记录,表1中没有一列称为
val
“如果表2中存在val”,那么其中肯定有一列应该是Table1
!此外,我们还需要有关如何联接这些表的信息,例如,Table2
中的doesuid
在Table1
中引用id
?实际上,uid引用了另一个表。这两个表没有链接到任何键。如果表2中存在val,表2中的每个记录都没有名为val
“表1中肯定有一个是Table1
!此外,我们还需要有关如何联接这些表的信息,例如,Table2
中的doesuid
在Table1
中引用id
?实际上,uid引用了另一个表。这两个表没有链接到任何键执行时间为161秒。是否可以更快地执行此查询?执行时间为161秒。是否可以更快地执行此查询?