具有所需结果的单行连接表
Joined tables single row with desired results
首先,我知道这是一个糟糕的设计案例,但我只是想知道我怎样才能从具有所需信息的接头中获得单个 sql 结果。
所以这是一个简单的例子,2 tables 与 ids 相关联:
TableA TableB
id code id tableA_id (FK) start end
---- ------- ---- ---------------- ------- ------
1 codeA 1 2 NY null
2 codeB 2 2 null LA
因此 TableA
中的第 2 行在 TableB
中有 2 行对应。
想要的结果:
tableA_code tableB_start tableB_end
------------- -------------- ------------
codeB NY LA
因此在结果中需要将 table B 中的 2 行分组为一行并消除空值。
查询:
select A.code, B1.start, B2.end
from TableB B1, TableB B2, TableA A
where B1.tableA_id = B2.tableA_id
and B1.tableA_id = A.id
and B1.start is not null and B2.end is not null
Let me know if this works for you
SELECT A.code,
MAX(B.STRT) STRT,
MAX(B.END)
END
FROM
(SELECT 1 AS A_ID,'CODE A' AS CODE FROM DUAL
UNION ALL
SELECT 2 AS A_ID,'CODE B' AS CODE FROM DUAL
)A,
(SELECT 1 AS B_ID,2 AS A_ID,'NY' STRT, NULL AS END FROM DUAL
UNION ALL
SELECT 2 AS B_ID,2 AS A_ID, NULL STRT, 'LA' AS END FROM DUAL
)B
WHERE A.A_ID = B.A_ID
GROUP BY A.code;
首先,我知道这是一个糟糕的设计案例,但我只是想知道我怎样才能从具有所需信息的接头中获得单个 sql 结果。
所以这是一个简单的例子,2 tables 与 ids 相关联:
TableA TableB
id code id tableA_id (FK) start end
---- ------- ---- ---------------- ------- ------
1 codeA 1 2 NY null
2 codeB 2 2 null LA
因此 TableA
中的第 2 行在 TableB
中有 2 行对应。
想要的结果:
tableA_code tableB_start tableB_end
------------- -------------- ------------
codeB NY LA
因此在结果中需要将 table B 中的 2 行分组为一行并消除空值。
查询:
select A.code, B1.start, B2.end
from TableB B1, TableB B2, TableA A
where B1.tableA_id = B2.tableA_id
and B1.tableA_id = A.id
and B1.start is not null and B2.end is not null
Let me know if this works for you
SELECT A.code,
MAX(B.STRT) STRT,
MAX(B.END)
END
FROM
(SELECT 1 AS A_ID,'CODE A' AS CODE FROM DUAL
UNION ALL
SELECT 2 AS A_ID,'CODE B' AS CODE FROM DUAL
)A,
(SELECT 1 AS B_ID,2 AS A_ID,'NY' STRT, NULL AS END FROM DUAL
UNION ALL
SELECT 2 AS B_ID,2 AS A_ID, NULL STRT, 'LA' AS END FROM DUAL
)B
WHERE A.A_ID = B.A_ID
GROUP BY A.code;