我一直在努力选择这个选择,我一直在寻找StackOverflow并尝试了一些东西,但没有什么可以帮助我解决我的特定问题。也许我只是错过了一些明显的东西。
我有两个表:Measurements,MeasurementFlags
“测量”包含来自设备的测量值,并且每个测量值都可以附加属性/属性(通常称为“标记”),以表示所讨论的测量值在某种程度上是特殊的(例如,一个标志可以表示测试或校准测量)。注意:每个国旗一个记录!
是的,所以“测量”表中的记录理论上可以附加无限量的MeasurementFlags,或者它没有。
现在,我需要从“测量”中选择记录,其中附加的“MeasurementFlag”值为“X”,但它也必须没有附加值为“Y”的标记。
我们正在谈论一个拥有数亿行的相当大的数据库,这就是我试图将所有这些逻辑保留在一个查询中的原因。将它拆分会产生太多查询,但如果在一个查询中无法做到,我想我没有选择。
提前致谢。
答案 0 :(得分:1)
SELECT measurements.*
FROM measurements
INNER JOIN measurement_flag
ON measurements.measurement_id = measurement_flag.measurement_id
AND flag = 'X'
AND 'Y' NOT IN (
SELECT flag
FROM measurement_flag
WHERE measurement_id = measurements.measurement_id);