匹配IN子句

时间:2017-03-03 23:12:40

标签: sql oracle

这是我的数据:
T1

P.ID   UniqueID   Value    
 1      1       Apple    
 1      2       Orange    
 1      3       Grapes    
 2      4       Peach    
 2      5       Orange    
 2      6       Banana 

T2(查询表)

Value
Apple
Orange
Grapes
Peach
Melon
Berry

我需要将数据分为两类:

  • 如果T1中每个父ID的所有记录在T2中都匹配,则为Type1
  • 如果父ID中T1中的任何一条记录没有 T2中匹配,然后是Type2。

目前,我正在使用IN子句来查询T2

select ID from T1 where T1.value in(select value from T2)

但是我似乎在使用这个逻辑获得T2中没有匹配的记录。我如何区分这些?在上面的示例中,ID 2应为Type 2,ID 1为Type 1。

3 个答案:

答案 0 :(得分:1)

您可以使用此查询:

class BottomRectangleRoundedCornersView: UIView {

    override func awakeFromNib() {
        let path = UIBezierPath(roundedRect: self.bounds,
                                byRoundingCorners: [UIRectCorner.BottomLeft, UIRectCorner.BottomRight], cornerRadii: CGSize(width: 10.0, height: 10.0))
        let mask = CAShapeLayer()
        mask.path = path.CGPath
        self.layer.mask = mask
        self.layer.backgroundColor = UIColor.whiteColor().CGColor //white fill
    }
}

答案 1 :(得分:0)

如果您还需要两个查询:

获得类型2:

select unique p_id from t1 where value not in (select value from t2)

然后将结果保存(存储)到临时表中,或将其转换为视图。无论哪种方式,我们都说你称之为t3。

获得类型1:

select unique p_id from t1 where p_id not in (select p_id from t3)

答案 2 :(得分:0)

如果查询表中存在该值,则可以使用临时结果分别检查每一行,然后为每个组选择max这些检查。因此,如果组中至少有一行没有引用(即该行的Type 2),则该组的max也是Type 2

select id, max(type)
from 
  (select id, nvl(t2.value,'Type 2', 'Type 1') as type 
   from t1 left join t2 on t1.value = t2.value)
group by id