我已经在这个选择上挣扎了一段时间了,我一直在StackOverflow周围搜索,尝试了很多东西,但是没有什么能帮助我解决我的特殊问题。也许我只是错过了一些显而易见的东西。
我有两张表:测量,测量标志
“测量”包含来自设备的测量,并且每个测量都可以附加属性/属性(通常称为“标志”),以表示所讨论的测量在某种程度上是特殊的(例如,一个标志可以表示测试或校准测量)。注:每旗一条记录!
对,所以“测量”表中的记录理论上可以附加无限量的测量标记,也可以没有。
现在,我需要从“Measurements”中选择记录,这些记录附加了一个值为“X”的“MeasurementFlag”,但它也不能附加值为“Y”的标志。
我们讨论的是一个拥有数亿行的相当大的数据库,这就是为什么我试图将所有这些逻辑都保存在一个查询中。拆分它会创建太多的查询,但是如果不能在一个查询中执行,我想我没有选择。
提前谢谢。
最佳答案
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);