首页 > 解决方案 > 多个 JOIN 表和 WHERE AND 遇到问题

问题描述

我的 SQL 课一直做得很好,但无论出于何种原因,我仍然无法理解如何将 JOIN 与 WHERE 和 AND 一起使用。

我需要帮助的问题是:编写一个显示两列的 SELECT 语句——投球手 id、名字、姓氏和原始分数。您必须使用表连接。包括在 Imperial Lanes 的原始得分为 175 或更高的投球手。使用正确的列标题。按原始分数降序对结果进行排序。

我的代码是:

SELECT bowlerid || ' ' || b.bowlerfirstname || ' ' || b.bowlerlastname "Bowler",
      bs.rawscore "Raw Score"
  FROM bowlers b JOIN bowler_scores bs USING (bowlerid)
      JOIN tourney_matches tm USING (matchid)
      JOIN tournaments USING (tourneyid)
  WHERE bs.rawscore >= 175
    AND tourneylocation = 'Imperial Lanes'
  ORDER BY "Raw Score" DESC;

我不确定我是否正确加入表格,因为我的结果不正确。

表格- 列

Bowler_scores - matchid、gamenumber、bowlerid、rawscore

保龄球- Bowlerid, bowlerlastname, bowlerfirstname, teamid

match_games - matchid、gamenumber、winingteamid

比赛- tourneyid, tourneydate, tourneylocation

tourney_matches - matchid, tourneyid

我留下了一些列,因为代码不需要它们。

我在链接 3 和 4 中添加了实际的数据库代码。

这是我应该得到的

我得到了什么

数据代码

结构代码

标签: sqloracle12c

解决方案


似乎制作原始示例的人发布了不正确的结果,这就是为什么我认为我的输出不正确的原因。在交叉检查了实际数据后,我得出的结论是我的代码是正确的。

SELECT bowlerid || ' ' || bowlerfirstname || ' ' || bowlerlastname "Bowler",
    rawscore "Raw Score"
  FROM tournaments JOIN tourney_matches USING (tourneyid)
    JOIN bowler_scores USING (matchid)
    JOIN bowlers USING (bowlerid)
  WHERE rawscore >= 175    
    AND tourneylocation = 'Imperial Lanes'
  ORDER BY "Raw Score" DESC;

推荐阅读