繁体   English   中英

从具有一对多关系的表中选择多个条件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM