【问题标题】: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
          相关资源
          最近更新 更多