【问题标题】:Query table data with inner join and two foreing keys使用内连接和两个外键查询表数据
【发布时间】:2020-05-23 01:14:27
【问题描述】:

我有以下两张表:

<html>
<head>
<style>
table, th, td {
  border: 1px solid black;
}
</style>
</head>
<body>

<table>
  <tr>
    <th>airport</th>
  </tr>
  <tr>
    <td>id_airport</td>
  </tr>
  <tr>
    <td>name_airport</td>
  </tr>
</table>

<h4>and</h4>

</body>
</html>

<html>
<head>
<style>
table, th, td {
  border: 1px solid black;
}
</style>
</head>
<body>

<table>
  <tr>
    <th>route</th>
  </tr>
  <tr>
    <td>id_route</td>
  </tr>
  <tr>
    <td>id_airport_origin</td>
  </tr>
  <tr>
    <td>id_airport_destination</td>
  </tr>
</table>

</body>
</html>

route.id_airport_origin 和 route.id_airport_destination 都是 airport.id_airport 的外键

我需要查询与其外键匹配的 name_airport 列。

我尝试执行以下查询,但没有成功。

SELECT route.id.route, airport.name_airport, airport.name_airport
FROM route
INNER JOIN airport ON route.id_airport_origin AND route.id_airport.destination = airport.id_airport

我已经尝试了上述代码的几种组合,但无法获得正确的查询。

有什么想法吗?

【问题讨论】:

  • 这是一个常见问题解答。在考虑发布之前,请阅读您的教科书和/或手册和谷歌任何错误消息或您的问题/问题/目标的许多清晰、简洁和精确的措辞,有和没有您的特定字符串/名称和站点:stackoverflow.com 和标签;阅读许多答案。如果您发布问题,请使用一个短语作为标题。反映你的研究。 PS 对于 SQL 使用代码块,sn-ps 用于 css/html/javascript。
  • 这是自联接。 How to get matching data from another SQL table for two different columns: Inner Join and/or Union? PS 请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。对于包含 DBMS 和 DDL(包括约束和索引)和输入为格式化为表的代码的 SQL。 How to Ask

标签: sql join select foreign-keys inner-join


【解决方案1】:

您的查询没有返回任何行,因为您正在寻找一个机场,其 id 等于路线的id_airport_originid_airport_destination:显然这不能匹配(...除非路线的起点和终点是一样)。

Insead,您需要加入两次机场表,一次用于起点,另一次用于目的地:

select
    r.id_route,
    ao.name_airport name_airport_origin
    ad.name_airport name_airport_destination
from route r
inner join airport ao on ao.id_airport = r.id_airport_origin
inner join airport ad on ad.id_airport = r.id_airport_destination

【讨论】:

  • 您的更正成功了,我在使用内部联接子句时犯了错误,我的困惑来自具有相同别名的双重内部联接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 2018-06-18
  • 1970-01-01
  • 2018-03-03
相关资源
最近更新 更多