如何在oracle sqldeveloper中连接两个表以获得单行结果

crcmnpdw  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(122)

我有下面的表格结构
Table1
| ID|站点名称Id|车站到达ID|
| --|--|--|
| 8 | 10001 | 10002 |
以及第二表stationTable
| ID| StationId|实际ID|
| --|--|--|
| 1 | 10001 | 11111 |
| 2 | 10002 | 22222 |
这里的stationDepartureIDStationArrivalID与第二个表stationTablesStationID相同。我想得到结果
Id、StationArrivalid actualID和StationArrivalID ActualID作为结果。

| ID|实际值Id| ActualArrivalId|
| --|--|--|
| 8 | 11111 | 22222 |
我尝试的是基于2列的两个表的左连接,但结果是2行。我能得到一些帮助吗?

mutmk8jj

mutmk8jj1#

连接到同一个表两次,在第一个连接条件中匹配出发站,在第二个连接条件中匹配到达站:

SELECT t.id,
       d.actualid AS actualdepartureid,
       a.actualid AS actualarrivalid
FROM   table1 t
       INNER JOIN stationTable d
       ON t.stationdepartureid = d.stationid
       INNER JOIN stationTable a
       ON t.stationarrivalid = a.stationid
  • (注意:如果您的要求满足,您可以将INNER JOIN更改为LEFT OUTER JOIN。)*

或者你可以使用相关的子查询:

SELECT t.id,
       (SELECT d.actualid FROM stationTable d WHERE t.stationdepartureid = d.stationid)
         AS actualdepartureid,
       (SELECT a.actualid FROM stationTable a WHERE t.stationarrivalid = a.stationid)
         AS actualarrivalid
FROM   table1 t

其中,对于样本数据:

CREATE TABLE Table1 (Id, StationDepartureId, StationArrivalID) AS
SELECT 8, 10001, 10002 FROM DUAL;

CREATE TABLE stationTable (Id, StationId, ActualID) AS
SELECT 1, 10001, 11111 FROM DUAL UNION ALL
SELECT 2, 10002, 22222 FROM DUAL;

两个输出:
| ID|实际部门ID|实际有效|
| --|--|--|
| 8 | 11111 | 22222 |
fiddle

相关问题