Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从两个表中选择常用项_Sql_Sqlite - Fatal编程技术网

Sql 从两个表中选择常用项

Sql 从两个表中选择常用项,sql,sqlite,Sql,Sqlite,给定两个Sqlite数据库: db1和db2的函数表具有近10k个条目 有一列fcn_名称将被调整 两个表有90%的相似条目。 我需要从两个具有相同名称的表中选择name和column2,预期输出为10k的90%,但结果是我得到了超过10k个条目。简言之,我只需要名称列的交集,但结果选择名称和列2 我尝试了以下sql语句: 从main.f、other.d函数中选择count*,其中f.name=d.name 从main.functions f和other.functions d中选择不同的f.n

给定两个Sqlite数据库:

db1和db2的函数表具有近10k个条目 有一列fcn_名称将被调整 两个表有90%的相似条目。 我需要从两个具有相同名称的表中选择name和column2,预期输出为10k的90%,但结果是我得到了超过10k个条目。简言之,我只需要名称列的交集,但结果选择名称和列2

我尝试了以下sql语句:

从main.f、other.d函数中选择count*,其中f.name=d.name

从main.functions f和other.functions d中选择不同的f.name,其中f.name=d.name


两者都不起作用。尽管使用distinct关键字,它返回的条目较少,但仍然超过10k。为什么会有更多的条目?

要根据某些匹配条件选择两个表中存在的行,我们通常会使用内部联接,例如

SELECT COUNT(*) 
FROM main.functions f1 
INNER JOIN other.functions f1 
ON f1.name = f2.name

我不熟悉Sqlite,但这通常是大多数DB的方法。

您的问题可能是由两个表中的重复项引起的。使用不同的名称连接两个表

例如:

SELECT COUNT(*) 
FROM (SELECT DISTINCT name FROM main.functions) f1 
INNER JOIN (SELECT DISTINCT name FROM other.functions) f2 
ON f1.name = f2.name
也许这就是解决办法

关于你的评论:

如果您的表具有主键,例如ID,那么以下内容应在sqllite下提供所需的结果:

SELECT f1.name, f1.yourField1, f1.yourField2, f1.yourField3 
FROM (SELECT name, yourField1, yourField2, yourField3
      FROM main.functions
      GROUP BY name
      HAVING id = MIN(id)
      ORDER BY id) f1 
INNER JOIN (SELECT DISTINCT name FROM other.functions) f2 
ON f1.name = f2.name

我认为您需要一个表中的所有行,其中名称位于另一个表中。为此,我建议:

select f.*
from main.functions f
where exists (select 1
              from other.functions o
              where o.name = f.name
             );

这不会检查行是否相同,只检查两个表中是否存在名称。如果两个表中有多行名称相同,它也不会复制行。

我尝试过内部联接,但它返回类似于WHERE的结果。不知何故,结果是一样的。你是说从main.functions中选择distinct f.name返回的行数比第二个查询少吗?从main.functions f1返回10k中选择countf1.name,从其他函数中选择countf2.name,从main.functions f1返回10k中选择countf2.name,但从main.functions f1中选择countdistinct f1.name,其他.f2函数,其中f1.name=f2.name返回10.1k。但是,如果没有明显的键,它返回10.4k。预期输出约为9k。如果名称字段不唯一,则为所有副本生成一个Carthian产品。那样的话,你总共会得到更多的条目。我迷路了。如果90%的行有共同的名称,那么选择所有具有共同名称的行将是18000行,而不是9000行。对,此SQL语句给出了正确的共同行数。但是,在获得公共行之后,如何扩展它以选择其他列呢?例如,我有另一个列abc,我想从两个同名行中选择abc值。对于要选择的所有其他字段,必须使用聚合函数(如COUNT、MAX、MIN、SUM、AVG)接受限制。谢谢,它解决了问题。这正是我要查找的,但我需要两个表中的行。我需要类似于从main.functions f1中选择f1.name、f1.column2、f2.name、f2.column的内容,如果存在其他.functions f2,请从其他.functions f2中选择1,其中f1.name=f2.name