SQL复杂的SELECT查询

时间:2014-04-07 22:14:55

标签: sql select db2

问题在于:我有2个表, TableA TableB ,如下所示:

TableA 的列:

- ID (not unique)
- ID2 (integer value)
- Flag1 (boolean)
- plus many columns used in other business queries.

TableB 的列:

- ID (unique, integer)
- Name1 (String value)
- plus many columns used in other business queries.

其他信息:

  • TableA.ID2 已加入 TableB.ID
  • 在TableA中,可以有多个具有相同ID但具有不同ID2和Flag1值的行。像这样:

      
        
          
            
    • ID = 10001,ID2 = 20000,Flag1 = N
    •       
    • ID = 10001,ID2 = 20001,Flag1 = N
    •       
    • ID = 10001,ID2 = 20003,Flag1 = Y
    •       
    • ID = 10001,ID2 = 20003,Flag1 = Y(与上面的行相同,但其他列的值不同)
    •       
    • ID = 10002,ID2 = 30000,Flag1 = N
    •       
    • ID = 10002,ID2 = 30003,Flag1 = Y
    •       
    • ID = 10002,ID2 = 30003,Flag1 = Y(这里再次相同)
    •       
    • ID = 10003,ID2 = 40003,Flag1 = N
    •       
    • ID = 10003,ID2 = 40004,Flag1 = N.       等
    •       
        
      

TableB 如下所示:

>- 20000, John
>- 20001, Paul
>- 20003, Sean
>- 30000, Alex
>- 30003, Justin
>- 40003, Mike
>- 40004, Oliver
>- etc

现在,我想从 TableA 获得单个SQL请求(如果可能!)每个ID 一行,其中 Flag1 = Y < / strong>,类似于:

SELECT DISTINCT ID FROM TableA where Flag1 = 'Y'

确实会回归:

  • 10001
  • 10002

=&GT;问题是我还需要获得EACH行:

  • TableA.ID2
  • TableB.Name1,其中TableA.ID2 = TableB.ID

这样的事情:

  
      
  • 10001,20003,Sean
  •   
  • 10002,30003,Justin
  •   

我尝试过连接,选择子句在哪里等无济于事: - (

有人对此有所了解吗?只有一个请求才有可能吗? 注意:数据库服务器是DB2。

1 个答案:

答案 0 :(得分:0)

试试这个。您可能需要修改SQL语法以使其与DB2一起使用,但概念将保持不变。即在TableA上使用以下查询返回临时表Temp。

 SELECT DISTINCT ID, ID2 FROM TableA where Flag1 = 'Y'

然后,最终查询将使用从TableA派生的临时表而不是TableA来连接tableB。因此,最终的查询将是:

Select Temp.ID as Col1, TableB.ID as Col2, TableB.Name From 
(SELECT DISTINCT ID, ID2 FROM TableA where Flag1 = 'Y') Temp
LEFT JOIN TableB On Temp.ID2 = TableB.ID

希望这有帮助。