0

有两个表table1和table2。

Table1 is as below:
col1 | col2 | Col3
 A     10     X
 B     11     X
 C     10     X
 A     20     X

表2如下:

col1 | col2 | col3 | col4
 A      10     1     UDHAY
 B      11     2     VIJAY
 C      10     1     SURESH
 A      20     2     ARUL
 A      10     3     UDHAY
 B      11     4     VIJAY
 C      10     4     SURESH
 A      20     5     ARUL

我想在 table2 中显示 col4 列,其中包含 3 个连接条件,如下所示。

    table1.COl1 = table2.COl1
and table1.COl2 = table2.COl2
and table2.COl3 = '1'

示例查询:

   select   
   table2.col4 
    from table1 
    left outer join table2 
    on(
        table1.COl1 = table2.COl1
        and table1.COl2 = table2.COl2
        and table2.COl3 = '1'); 

问题:如果我想显示table2.col4条件 table2.col3 1,2,3,4,5 并匹配 table1 中的其他条件,如何制作脚本?

实际上我知道我们可以用不同的别名添加同一张表 5 次并且可以打印。但我不想重复同样的条件 5 次。只有where条件对所有 5 个值都是通用的。


2013 年 10 月 30 日添加:

感谢您的答复。不,不像你提到的使用IN。现在我正在使用以下脚本概念:

  select  A.col1,A.co2,B1.col4 ,B2.col4,B3.col4.B4.col4
  from table1 A
  left outer join table2 B1
  on(
    A.COl1 = B1.COl1
    and A.COl2 = B1.COl2
    and B1.COl3 = '1')
left outer join table2 B2
     on(
    A.COl1 = B2.COl1
    and A.COl2 = B2.COl2
    and B2.COl3 = '2')
left outer join table2 B3
     on(
    A.COl1 = B3.COl1
    and A.COl2 = B3.COl2
    and B3.COl3 = '3')
left outer join table2 B4
     on(
    A.COl1 = B4.COl1
    and A.COl2 = B4.COl2
    and B4.COl3 = '4');

所以我的输出将是:

 A | 10 | UDHAY | |UDHAY| |
 B | 11 | | VIJAY| | VIJAY |
 C | 10 | SURESH | | | SURESH |
 A | 20 | | ARUL | | |

但就像上面的脚本一样,我必须将其设置为 25 组合(1 到 25)。所以如果我像上面那样制作脚本,脚本行将超过 200 行。为避免这种情况,请您帮助建议一些其他方法来减少脚本行并获得相同的输出?

4

2 回答 2

0

我不确定我是否正确理解了您,您的意思是这样的吗?

and table2.COl3 IN ('1','2','3','4','5')
于 2013-10-29T19:21:15.287 回答
0

第一个解决方案(微不足道):使用整个连接集创建一个视图并在您的脚本上查询它,这有点狡猾但让您的脚本更短。如果您的数据集最终超出规模,您可以切换到物化视图,并简化最终可能成为昂贵计划的计划。

第二种解决方案(不是那么简单):如果您的表确实有一个命名约定,您可以编写一个 PL 块并循环遍历它,四处走动并排列您想要加入的表,以便您可以在运行时将连接连接到一个字符串中并将其作为动态 SQL 运行。

于 2013-10-31T19:28:30.793 回答