我有 2 张桌子,我将展示简化版本。我希望从第一个表中找到完全匹配,其中我在第二个表中有确切的条目列表(因为连接表中的多个单独的记录将匹配第一个表的主键)。
Table Metrics:
MetricsId: (primary key)
A: (some parameter)
B: (some parameter)
C: (some parameter)
像这样:
MetricsId A B C
--------------------------
1 0.5 0.2 3.5
2 0.1 0.1 4.5
3 1.1 1.0 3.0
TABLE Metrics_Grid:
MetricsId (foreign key to Metrics
GridId (foreign key to another table)
MetricsId GridId
---------------------
1 12
1 13
1 14
1 15
2 12
3 13
指标表中的记录表示为特定参数和一组特定网格生成的指标。第二个表是包含网格列表的表,但每个网格都有一条记录,该记录包含在该度量记录中。单个网格可以在多个列表中(例如,假设您有单个网格的指标,它会有一个条目,并且该指标条目在链接表中只有一个,那么您可能有一组网格的指标,包括单个网格(实际上每个人都有指标记录,然后是一组,每次运行指标时)
我需要做的是找到完全匹配的参数和网格列表何时已经在数据库中,并返回一个匹配项或什么都不返回。所以我需要找到这样的匹配:
首先,我有需要匹配的确切 gridID 的列表(这是用 java 编码的,使用 Spring JdbcTemplate,所以我可以以我需要的任何形式传入列表)
Select M.* from Metrics M
Where
A=? AND B=? AND C=?
AND
EXISTS (SELECT MG.GridId From MetricsGrid MG where MG.MetricsId=M.MetricsId)
** This is where I get lost **
AND <THE LIST OF THE THE GridsIds matches exactly the list I have>
我尝试了一些错误的事情,我知道它们为什么是错误的,比如这个:它只是传回了任何具有 grid_id 的指标记录,所以我得到了多个而不是一个。
因此,例如,我希望能够要求匹配 A=0.5, B=0.2, c=3.5 AND GridIds = (12, 13, 14, 15) 或类似的 Metrics 记录,他 Metrics 记录匹配相同的参数,但只有 GridId 12
我的尝试总是返回所有记录。我尝试使用 Group By.. 有 Count(),但无法做到这一点。我认为这并不难,我的大脑只是卡住了。
我还没有找到类似的东西,但它似乎很常见?
感谢您的任何见解。