代码之家  ›  专栏  ›  技术社区  ›  Saurabh Kumar

表上的动态联接条件

  •  1
  • Saurabh Kumar  · 技术社区  · 15 年前

    如何有效地实现以下功能?

    表存储用户通过使用一个或多个值从中搜索表而选择搜索数据库的各种条件。例如,他可以给出SSN或DOB或SSN和DOB。

    我总是需要返回personid,它可能来自person表或视图。

    用户给出的搜索条件将存储在下面的“条件”表中

    conditions
    -------------
    id,custid,dob,ssn,base
    
    person
    --------
    id,firstname,ssn,dob
    
    view
    --------
    id,personid,base
    
    So, IF DOB is to be searched
    
    SELECT p.personid from conditon c 
    INNER JOIN person p
    ON p.dob=c.dob
    WHERE c.condition=1
    
    IF SSN and base is to be searched
    
    SELECT v.personid from conditon c 
    INNER JOIN view v 
    ON c.base=v.base
    INNER JOIN person p
    ON p.ssn=c.ssn
    WHERE c.condition=1
    
    IF SSN,DOB and base is to be searched
    
    SELECT v.personid from conditon c 
    INNER JOIN view v 
    ON c.base=v.base
    INNER JOIN person p
    ON p.ssn=c.ssn
    AND
    p.dob=c.dob
    WHERE c.condition=1
    
    1 回复  |  直到 12 年前
        1
  •  0
  •   Charles Bretana    15 年前

      Where ColumnName = IsNull(@InParameter, ColumnName) 
    

    或者在连接条件中使用相同的模式

       Join Table a 
          On [Other stuff]
               And ColumnName = IsNull(@InParameter, ColumnName)
    

    编辑:添加另一个谓词到连接条件。因为,在没有指定参数值的情况下,连接条件将始终为真,并且,除非连接中存在其他谓词条件,否则将有效地得到笛卡尔积。。。