【问题标题】:How to make a inner join with condition...?如何使用条件进行内部连接......?
【发布时间】:2012-10-14 06:52:45
【问题描述】:

SQL Server 2000

使用20多个视图,所有视图都与table1内连接(id和value1和value2)

表1

ID Value1 Value2

001 100 null
001 200 null
001 300 null
001 400 null
001 200 null

或

ID Value1 Value2

001 null 100 
001 null 200 
001 null 300 
001 null 400 
001 null 200 

表2

ID value1 value2

....
....

some data's

从 table1 中,value1 或 value2 应始终为空。现在的问题是,如果 value1 或 value2 列为空,则输出显示为空,因为所有视图都是带有 id、value1、value2 的内连接

我想用条件进行内连接,如果 value1 不为空,则内连接 value1 或者如果 value2 不为 null 则与 value2 进行内连接

这样查询

Select * from table2 inner join with table1 on tabel2.id = table1.id and if table1.value1 is null then table2.value2 = table1.value2 or
else table2.value1 = table1= value1 end if

如何查询上述条件

需要 SQL 查询帮助

【问题讨论】:

    标签: sql sql-server sql-server-2000


    【解决方案1】:

    会像下面这样工作吗?

    SELECT * FROM table2
    INNER JOIN WITH table1 ON table2.id = table1.id
        AND (table1.value1 = table2.value1 OR table1.value1 IS NULL)
        AND (table1.value2 = table2.value2 OR table1.value2 IS NULL)
    

    我认为如果你有一个大数据集,这可能会很慢......

    【讨论】:

      【解决方案2】:

      你试过coalesce(value1, value2)吗?

      【讨论】:

      • select * from Table2 inner join (select coalesce(Value1, Value2) from Table1) t1 on Table2.ID = t1.ID
      • 我想的更多是:select * from table2 t2 inner join t1 on t1.id = t2.id and coalesce(t1.value1, t1.value2) = coalesce(t2.value1, t2.value2)
      • 我同意,但是就结果而言,我认为如果我们这样做会更快: select coalesce(t1.value1, t1.value2) from table1 t1 union select coalesce(t2.value1, t2 .value2) 来自 table2 t2
      • 编辑您的问题以显示您正在尝试什么以及您获得的结果。
      【解决方案3】:

      试试这个解决方案:

      Select * 
      from table2 
      inner join table1 on (tabel2.id = table1.id 
                            and table1.value1 is null 
                            and table2.value2 = table1.value2) 
                        or ( table2.value1 = table1.value1 )
      

      【讨论】:

        【解决方案4】:
        SELECT * FROM table2 t2
        INNER JOIN WITH table1 t1 ON table2.id = table1.id
        On (CASE WHEN t1.value1 is null then t1.value2=t2.value2 else t1.value1=t2.value1)
        and
        (CASE WHEN t2.value1 is null then t2.value2=t1.value2 else t2.value1=t1.value1)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-02-17
          • 1970-01-01
          • 1970-01-01
          • 2013-11-19
          • 2014-05-31
          • 2012-11-04
          • 1970-01-01
          相关资源
          最近更新 更多