问题在于:我有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中,可以有多个具有相同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'
确实会回归:
=&GT;问题是我还需要获得EACH行:
这样的事情:
- 10001,20003,Sean
- 10002,30003,Justin
我尝试过连接,选择子句在哪里等无济于事: - (
有人对此有所了解吗?只有一个请求才有可能吗? 注意:数据库服务器是DB2。
答案 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
希望这有帮助。