我有一个包含 3 个表的 SQLite 数据库。这些表中的每一个都有两列:名称和值,因此所有表都具有相同的记录(名称)但值不同。如何选择属于跨这些表的最小值总和的记录,以便记录名称是唯一的?
姓名:史蒂文、杰米、迈克尔、乔丹、加里
值(value)观
(按名字顺序)
表 1:1、2、3、4、5
表 2:2、3、1、5、6
表 3:9、0、2、11、3
输出应该返回 (Steven, Michael, Jamie),因为在这种情况下,值的总和将等于 2,这是最不可能的。
最佳答案
首先,SQL 表表示无序 集。因此,两个表之间没有基于位置的对应关系。相反,让我假设每个都有一个 name
列。
其次,SQL 并没有真正进行优化,因此您需要以蛮力的方式进行优化。即生成所有组合,然后选择最小值。
本质上使用了一个cross join
:
select min(t1.value + t2.value + t3.value)
from table1 t1 cross join table2 t2 cross join table3 t3
where t1.name <> t2.name and t3.name not in (t1.name, t2.name);
或者,如果您想要名称:
select (t1.value + t2.value + t3.value), t1.name, t2.name, t3.name
from table1 t1 cross join table2 t2 cross join table3 t3
where t1.name <> t2.name and t3.name not in (t1.name, t2.name)
order by (t1.value + t2.value + t3.value)
limit 1
关于python - 从具有最小值总和的不同表中选择唯一记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31428576/