我有一个包含两个外键的表.我需要删除key1&中的所有行. key2相同,但val< $x.
密钥1和key2不是不同的值;可能有多个记录具有相同的key1和/或key1 / key2对.
我已经尝试了几种方法,但是什么也做不了.到目前为止,每种方法都会导致MySQL错误(例如“无法重新打开表”)或错误的结果.
表中的样本数据:
rownum key1 key2 val col col2 col3 col4
1 123 1 2 a b c d
2 123 1 2 e f g h
3 123 2 3 i j k l
4 123 2 3 m n o p
5 456 1 1 q r s t
我需要删除“ val”为
换句话说,对于每个不同的key1 / key2组合,我需要找到最大的“ val”($x),并删除val为
因此,delete语句之后的期望输出是:
rownum key1 key2 val col col2 col3 col4
3 123 2 3 i j k l
4 123 2 3 m n o p
5 456 1 1 q r s t
(col-col4与确定删除哪些记录无关,我之所以包括它们,只是为了注意该表包括其他列.)
key1,key2和“ val”均为int类型.
如何删除key1& key2相同,但val< $x?
解决方法:
使用多表删除语法,通过该语法使用关键字段将表自身连接起来:
DELETE t1 FROM table1 t1, table1 t2
WHERE t1.key1=t2.key1 AND t1.key2=t2.key2 AND t1.val < t2.val
Sqlfiddle-我修改了示例数据,以使键对具有不同的值.
标签:mysql
来源: https://codeday.me/bug/20191119/2032332.html