[英]select with multiple conditions from table with one to many relations
我有几个看起来像这样的桌子
-- TablePair
pairId ID value
p1 1 'val1'
p2 2 'val2'
p3 3 'val3'
p4 4 'val4'
我也有一个表引用该表
-- TableObject
objectId refId
ob1 p1
ob1 p2
ob1 p3
ob2 p3
我只想选择具有1 = val1, 2 = val2, 3)
和值('val1', 'val2', 'val3')
。 在我们的情况下,它只会是对象ob1
。 在其他情况下,它不应返回任何内容。
当我这样做的时候
select objectId from TablePair
inner join TableObject
where (id = '1' and value = 'val1')
or (id = '2' and value = 'val2')
or (id = '3' and value = 'val3')
它返回相同的三个对象。 我添加了distinct
,它返回正常。 但是,如果我至少有一个条件在工作,它仍然会返回该对象。 但是在这种情况下,我什么也不想返回。
怎么做? (它应该与DMS无关)
预期结果应为ob1
1 'val1'
2 'val2'
3 'val3'
因为它引用了pairId
中的TableObject
。 对于ob2
它应返回null
因为ob2
仅引用一个条件
您可以在下面查询
SELECT tp.ID, tp.value
FROM TablePair tp
JOIN TableObject tob ON tp.pairId = tob.refId
JOIN (SELECT ObjectId
FROM TablePair tp
JOIN TableObject tob ON tp.pairId = tob.refId
WHERE (id = '1' AND value = 'val1')
OR (id = '2' AND value = 'val2')
OR (id = '3' AND value = 'val3')
GROUP BY objectId HAVING COUNT(1) = 3) tF
ON tF.ObjectId = tob.ObjectId
WHERE (tp.id = '1' AND tp.value = 'val1')
OR (tp.id = '2' AND tp.value = 'val2')
OR (tp.id = '3' AND tp.value = 'val3');
即使在TableObject
有一条类似于ob1 p4
的记录,上述查询也为我提供了以下结果:
希望这对您有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.