Python 从具有最小值和的不同表中选择唯一记录

Python 从具有最小值和的不同表中选择唯一记录,python,mysql,sql,database,sqlite,Python,Mysql,Sql,Database,Sqlite,我有一个包含3个表的SQLite数据库。每个表都有两列:name和value,这样所有表都有相同的记录名称,但值不同。如何选择作为跨越这些表的最小值之和的一部分的记录,以便记录名是唯一的 姓名:史蒂文、杰米、迈克尔、乔丹、加里 价值观 按姓名顺序 表1:1,2,3,4,5 表2:2,3,1,5,6 表3:9,0,2,11,3 输出应该返回Steven、Michael、Jamie,因为本例中的值之和等于2,这是最不可能的。首先,SQL表表示无序集。因此,基于位置的两个表之间没有对应关系。相反,让我

我有一个包含3个表的SQLite数据库。每个表都有两列:name和value,这样所有表都有相同的记录名称,但值不同。如何选择作为跨越这些表的最小值之和的一部分的记录,以便记录名是唯一的

姓名:史蒂文、杰米、迈克尔、乔丹、加里

价值观

按姓名顺序

表1:1,2,3,4,5

表2:2,3,1,5,6

表3:9,0,2,11,3


输出应该返回Steven、Michael、Jamie,因为本例中的值之和等于2,这是最不可能的。

首先,SQL表表示无序集。因此,基于位置的两个表之间没有对应关系。相反,让我假设每个都有一个名称列

其次,SQL并没有真正进行优化,所以您需要用蛮力的方式进行优化。也就是说,生成所有组合,然后选择最小值

基本上使用交叉连接的:

或者,如果您需要名称:

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
你可以试试这个

    SELECT T1.val,T2.val,T3.val FROM T1 , T2 , T3 
    WHERE T1.val <> T2.val AND T2.val <> T3.val AND T1.val <> T3.val
    GROUP BY T1.val,T2.val,T3.val,(T1.no + T2.no + T3.no)
    HAVING (T1.no + T2.no + T3.no) = 
    (SELECT MIN(T1.no)+MIN(T2.no)+MIN(T3.no)     FROM T1 , T2 , T3 
    WHERE T1.val <> T2.val AND T2.val <> T3.val AND T1.val <> T3.val)
如果有3个以上的表格,只需在T1、T2、T3、T4、…TN之后添加表格即可 并通过在where子句中添加此项来添加不相等的比较
T1.val T4.val和T2.val T4.val以及T3.val T4.val适用于每个表//这是为T4添加的

如果有三个以上的表,where子句将如何更改?@ENIGMA。这将是一个不同的问题。但是,您只需在t1.name、t2.name、t3.name中添加t4.name。
    SELECT T1.val,T2.val,T3.val FROM T1 , T2 , T3 
    WHERE T1.val <> T2.val AND T2.val <> T3.val AND T1.val <> T3.val
    GROUP BY T1.val,T2.val,T3.val,(T1.no + T2.no + T3.no)
    HAVING (T1.no + T2.no + T3.no) = 
    (SELECT MIN(T1.no)+MIN(T2.no)+MIN(T3.no)     FROM T1 , T2 , T3 
    WHERE T1.val <> T2.val AND T2.val <> T3.val AND T1.val <> T3.val)