mysql - 如何连接多个表,确保将较小的表扩展到较大的表

标签 mysql sql join

我有一系列数据库表,需要从顶部开始连接在一起,并减少从表中选择的点数。但在最后一步,我需要扩展最后一个表以满足大表中的点数。这是示例

分析物

分析物索引、分析物名称 ... 1、'dCMP'

分析文件夹

Analyte_Index , Folder_Index ...
 1            ,  1

文件夹

Folder_Index, Folder_Path ...
 1          , 'c:\temp'

文件

File_Index, Folder_Index, File_Name ...
1         ,  1          , 'test.dat'

峰值

Peak_Index, File_Index, Folder_Index, Cluster_Index ...
1         , 1         , 1           , 1
2         , 1         , 1           , 1
3         , 1         , 1           , 2
4         , 1         , 1           , 3
5         , 1         , 1           , 3
6         , 1         , 1           , 4

集群

Cluster_Index ...
1
2
3

峰值表有很大的表 block ,一个簇内可以有许多峰值。因此,所有其他表都减少了从峰值表中选择的点数,这非常有效。选择后,如果我不包括集群上的连接,则有大约 9,000,000 个点。

这是我的查询

select  peaks.Peak_Index, peaks.Cluster_Index, peaks.P_maxAmplitude, peaks.P_averageAmplitude, clusters.C_averageAmplitude
from peaks
join files
  on files.File_Index = peaks.File_Index
join folders
  on folders.Folder_Index = files.Folder_Index
join analytefolders
  on analytefolders.Folder_Index = folders.Folder_Index
join analytes
  on analytes.Analyte_Index = analytefolders.Analyte_Index
join clusters
  on clusters.Cluster_Index=peaks.Peak_Index

where analytes.Analyte_Name='dCMP' 

通过集群连接,返回的行数减少到约 1,000,000(集群数)。我需要将集群中的数据扩展以匹配峰值数量。我已经尝试了所有我能想到的联接并更改了联接的顺序,但这超出了我有限的 SQL 技能。

最佳答案

您的最后一次加入应该在clusters.Cluster_Index=peaks.Cluster_Index

关于mysql - 如何连接多个表,确保将较小的表扩展到较大的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18366567/

相关文章:

sql - 获取 varchar 一部分的最后一个单词(左/右)

mysql - 如何使用 MySQL 计算现有值和不存在值?

php - 将一列指向另一个表中的列

MySQL,我怎样才能对 group_concat 进行分组?

c# - 我想在 GridView 中编辑我的表格

Mysql连接给出重复行

mysql - 使用 GROUP BY 更新相关的所有记录

mysql - 在 UNION 查询 MYSQL 中添加联接

mysql - 获取MySQL中GROUP BY结果的百分比值

mysql - sql 从表中选择没有出现在第二个表中的所有内容