给定两个 Sqlite 数据库:
我需要从两个具有相同名称的表中选择 name and column2
,预期输出是 10k 的 90%,但结果我得到了超过 10k 个条目。简而言之,我只需要 name 列的交集,但结果选择 name 和 column2。
我试过下面的sql语句:
select count(*) from main.functions f, other.functions d where f.name=d.name
select distinct f.name from main.functions f, other.functions d where f.name=d.name
两者都不起作用。尽管使用“distinct”关键字,它返回的条目较少,但仍超过 10k。为什么有更多条目?
答案 0 :(得分:0)
要根据某些匹配条件选择两个表中都存在的行,我们通常会使用 INNER JOIN,例如
SELECT COUNT(*)
FROM main.functions f1
INNER JOIN other.functions f1
ON f1.name = f2.name
我不熟悉 Sqlite,但通常是大多数数据库的方法。
答案 1 :(得分:0)
您的问题可能是由两个表中的重复项引起的。使用 DISTINCT 名称连接两个表。
例如:
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
答案 2 :(得分:0)
我认为您需要一个表中名称在另一表中的所有行。为此,我建议:
select f.*
from main.functions f
where exists (select 1
from other.functions o
where o.name = f.name
);
这不检查行是否相同,仅检查名称是否存在于两个表中。如果两个表中有多个同名的行,它也不会重复行。