草庐IT

MYSQL LEFT JOIN 3 个表包含 NULL 集

coder 2023-10-12 原文

试图对其他 SO 用户的问题/答案进行“逆向工程”,但没有成功。 JOINS 仍然让我望而却步。

我有三个表:race(所有比赛的列表)、result(每场比赛的结果)、driver(车手信息)。并非所有车手都参加过特定赛道的所有比赛。

比赛台

| race_id   | track_id   | year   | complete |
+-----------+------------+--------+----------+
| 1         | 1          | 2006   | 1        |
| ...       | ...        | ...    | ...      |
| 21        | 1          | 2007   | 1        |
| ...       | ...        | ...    | ...      |
| 135       | 1          | 2008   | 1        |
| ...       | ...        | ...    | ...      |
| 215       | 1          | 2009   | 1        |
| ...       | ...        | ...    | ...      |
| 292       | 1          | 2010   | 1        |
| ...       | ...        | ...    |...       |
| 351       | 1          | 2011   | 0        |
+-----------+------------+--------+----------+

结果表

| race_id | driver_id | finish |
+---------+-----------+--------+
| 135     | 1         | 15     |
| ...     | ...       | ...    |
| 292     | 1         | 6      |
+---------+-----------+--------+

驱动表

| driver_id | name       |
+-----------+------------+
| 1         | Joe Driver |
+-----------+------------+

我想要一个显示的结果集:

| name       | race_id |  year  | finish |
+------------+---------+--------+--------+
| Joe Driver | 21      | 2007   | NULL   |
| Joe Driver | 135     | 2008   | 15     |
| Joe Driver | 215     | 2009   | NULL   |
| Joe Driver | 292     | 2010   | 6      |
+------------+---------+--------+--------+

Joe Driver 仅参加了 2006 年之后 track_id = 1 的 4 场比赛中的 2 场,并且仅包括完整的比赛 (1)

这是我当前的查询:

SELECT driver.driver, race.id, race.year, result.finish
FROM race
LEFT JOIN result ON race.id = result.race_id
LEFT JOIN driver ON result.driver_id = driver.driver_id
WHERE race.track_id = 1
AND race.year > 2006
AND race.complete = 1
AND driver.driver_id = 1
ORDER BY race.id ASC

我得到的结果只显示车手参加的比赛:

| name       | race_id |  year  | finish |
+------------+---------+--------+--------+
| Joe Driver | 135     | 2008   | 15     |
| Joe Driver | 292     | 2010   | 6      |
+------------+---------+--------+--------+

我确定我忽略了 JOINS 的简单规则?

谢谢!

最佳答案

SELECT  driver.driver, race.id, race.year, result.finish
FROM    race
CROSS JOIN
        driver
LEFT JOIN
        result
ON      result.race_id = race.id
        AND result.driver_id = driver.driver_id
WHERE   race.track_id = 1
        AND race.year > 2006
        AND race.complete = 1
        AND driver.driver_id = 1
ORDER BY
        race.id ASC

关于MYSQL LEFT JOIN 3 个表包含 NULL 集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4511583/

有关MYSQL LEFT JOIN 3 个表包含 NULL 集的更多相关文章

  1. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

    为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

  2. ruby - 检查字符串是否包含散列中的任何键并返回它包含的键的值 - 2

    我有一个包含多个键的散列和一个字符串,该字符串不包含散列中的任何键或包含一个键。h={"k1"=>"v1","k2"=>"v2","k3"=>"v3"}s="thisisanexamplestringthatmightoccurwithakeysomewhereinthestringk1(withspecialcharacterslike(^&*$#@!^&&*))"检查s是否包含h中的任何键的最佳方法是什么,如果包含,则返回它包含的键的值?例如,对于上面的h和s的例子,输出应该是v1。编辑:只有字符串是用户定义的。哈希将始终相同。 最佳答案

  3. "\0"null 的 Ruby 测试? - 2

    我在破坏脚本的字符串中出现了一些奇怪的字符。据我所知,通过putbadstring到控制台,它们是"\0\0\0\0"。我想对此进行测试,以便我可以忽略它们...但是如何呢?以为这就是blank?和empty?的用途?!?:>badstring="\0"=>"\u0000">badstring.blank?NoMethodError:undefinedmethod`blank?'for"\u0000":Stringfrom(irb):97from/Users/meltemi/.rvm/rubies/ruby-2.0.0-p195/bin/irb:16:in`'>badstring.em

  4. ruby-on-rails - 使用包含多个关联和单独的条件 - 2

    我的Gallery模型中有以下查询:media_items.includes(:photo,:video).rank(:position_in_gallery)我的图库模型有_许多媒体项,每个都有一个照片或视频关联。到目前为止,一切正常。它返回所有media_items包括它们的photo或video关联,由media_item的position_in_gallery属性排序。但是我现在需要将此查询返回的照片限制为仅具有is_processing属性的照片,即nil。是否可以进行相同的查询,但条件是返回的照片等同于:.where(photo:'photo.is_processingIS

  5. ruby - 我怎样才能只写一次 "Text"并同时检查 path_info 是否包含 'A' ? - 2

    -if!request.path_info.include?'A'%{:id=>'A'}"Text"-else"Text"“文本”写了两次。我怎样才能只写一次并同时检查path_info是否包含“A”? 最佳答案 有两种方法可以做到这一点。使用部分,或使用content_forblock:如果“文本”较长,或者是一个重要的子树,您可以将其提取到一个部分。这会使您的代码变干一点。在给出的示例中,这似乎有点矫枉过正。在这种情况下更好的方法是使用content_forblock,如下所示:-if!request.path_info.inc

  6. Ruby,使用包含 TK GUI 的 ocra 部署一个 exe - 2

    Ocra无法处理需要“tk”的应用程序require'tk'puts'nope'用奥克拉http://github.com/larsch/ocra不起作用(如链接中的一个问题所述)问题:https://github.com/larsch/ocra/issues/29(Ocra是1.9的"new"rubyscript2exe,本质上它用于将rb脚本部署为可执行文件)唯一的问题似乎是缺少tcl的DLL文件我不认为这是一个问题据我所知,问题是缺少tk的DLL文件如果它们是已知的,则可以在执行ocra时将它们包括在内有没有办法知道tk工作所需的DLL依赖项? 最佳答

  7. ruby - 允许主机名包含下划线的 URI.parse 的替代方法 - 2

    我正在使用DMOZ的listofurltopics,其中包含一些具有包含下划线的主机名的url。例如:608609TheOuterHeaven610InformationandimagegalleryofMcFarlane'sactionfiguresforTrigun,Akira,TenchiMuyoandotherJapaneseSci-Fianimations.611Top/Arts/Animation/Anime/Collectibles/Models_and_Figures/Action_Figures612虽然此url可以在网络浏览器中使用(或者至少在我的浏览器中可以使用:

  8. Ruby 计数数组对象,如果对象包含值 - 2

    我有一个数组:array=['Footballs','Baseball','football','Soccer']而且我需要计算看到Football或Baseball的次数,无论大小写和复数形式如何。这是我尝试做的,但没有成功:array.count{|x|x.downcase.include?'football'||x.downcase.include?'baseball'}编写这段代码的正确或更好的方法是什么?我正在寻找3作为答案。 最佳答案 我会将count与一个block结合使用,该block根据与您正在寻找的约束相匹配的正

  9. ruby - 为什么 Object 在 Ruby 中既包含内核又继承它? - 2

    在Ruby(1.8.X)中为什么Object既继承了内核又包含了内核?仅仅继承还不够吗?irb(main):006:0>Object.ancestors=>[Object,Kernel]irb(main):005:0>Object.included_modules=>[Kernel]irb(main):011:0>Object.superclass=>nil请注意,在Ruby1.9中情况类似(但更简洁):irb(main):001:0>Object.ancestors=>[Object,Kernel,BasicObject]irb(main):002:0>Object.included

  10. ruby - 执行包含多个模块的同名方法 - 2

    我有两个具有相同方法名称的模块。当我在某个类中包含两个模块时,只执行最后一个模块的方法。我需要在初始化类时同时执行:classMyClassincludeFirstModuleincludeSecondModuledefinitializefoo#fooiscontainedinbothmodulesbutonlytheoneinSecondModulesisexecutedendend可行吗? 最佳答案 正如YusukeEndoh所说,在Ruby中一切皆有可能。在这种情况下,您必须忘记只说“foo”的便利性,并且必须非常明确地说明

随机推荐