Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.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内部联接返回的数据比表1多得多?_Sql - Fatal编程技术网

为什么我的sql内部联接返回的数据比表1多得多?

为什么我的sql内部联接返回的数据比表1多得多?,sql,Sql,我需要加入三个表来获得我需要的所有信息。表a有7000万行,在把a和b连接起来之后,我得到了4000万个数据。但在我加入表c(只有170万行)之后,它变成了3亿行 在表c中,有多个相同的pt_id和fi_id,一个pt_id可以连接到多个不同的fi_id,但一个fi_id只能连接到一个相同的pt_id 我想知道是否有任何方法可以消除重复的行,因为我加入表c只是为了获得pt_id 谢谢你的帮助 select c.pt_id,b.fi_id,a.zq_id from a inner join (s

我需要加入三个表来获得我需要的所有信息。表a有7000万行,在把a和b连接起来之后,我得到了4000万个数据。但在我加入表c(只有170万行)之后,它变成了3亿行

在表c中,有多个相同的pt_id和fi_id,一个pt_id可以连接到多个不同的fi_id,但一个fi_id只能连接到一个相同的pt_id

我想知道是否有任何方法可以消除重复的行,因为我加入表c只是为了获得pt_id

谢谢你的帮助

select c.pt_id,b.fi_id,a.zq_id
from a 
inner join (select zq_id, fi_id from b) b
on a.zq_id = b.zq_id
inner join (select fi_id,pt_id from c) c
on b.fi_id = c.fi_id
您可以使用分组方式

select c.pt_id,b.fi_id,a.zq_id
from a 
inner join (select zq_id, fi_id from b) b
on a.zq_id = b.zq_id
inner join (select fi_id,pt_id from c) c
on b.fi_id = c.fi_id
group by c.pt_id,b.fi_id,a.zq_id 
要删除所有重复行,请执行以下操作:


如果c中有多条记录具有相同的fi_id,那么每个副本都会得到单独的结果行。也许你需要选择UNIQUEROW。谢谢你的建议。它像选择不同的c.pt\u id、b.fi\u id、a.zq\u id吗?因为我还有很多其他的列需要选择,所以在我添加distinct.Unrelated后它会失败,但是:内部连接选择zq_id,b上的fi_id。。。可以简化为内部连接b上。。。派生表子查询是完全无用的查询。它确实有助于简化代码。用您正在使用的数据库标记您的问题。谢谢您的建议,但不知道为什么,我在使用group by时失败了。在所有内部联接之后,甚至不能使用group by col,也不能使用select distinct方法。@Binke您能显示您的失败消息吗?因为我使用的数据库是数据库中的公司,不知道他们是如何设计的,但是当你失败时,它会返回sql failure而不告诉你具体的问题是什么。我很确定内部b是正确的,我得到了zq_id和fi_id,有没有其他方法可以根据fi_id添加pt_id?