jjzjj

mysql ->、<、<>、= 内部连接条件的运算符

coder 2023-10-10 原文

我的老板按我的方式扔了这段代码,我很难理解内部连接的最后一个 ON 语句是如何工作的。我认为他也不完全理解它(但它完成了工作)。真的只是想了解更多有关 SQL 工作原理的信息。非常感谢!

这是 On 语句

and (A.Submitted_Date > X.Submitted_Date)))

这里是查询

    SELECT AA.ID, AA.Submitted_Date as Date_Status      
    FROM Report as AA 
    where AA.Submitted_Date in
    --START
       (
        SELECT X.Submitted_Date
        FROM Report as A 
        inner join  
       --Start Find All Dates Submitted
        (
         SELECT [ID],[Submitted_Date]
         FROM Report
          where not(Submitted_Date is null and  Cleared_Date is null)
          group by ID, Submitted_Date) as X 
        --End Find all Dates  Submittd
     --below is the conditions of the join


    ON A.ID = X.ID 
    and A.ID= AA.ID

    --THIS IS THE CONDITION I AM CONFUSED ABOUT!!!!
    and (A.Submitted_Date > X.Submitted_Date)))

    group by X.Submitted_Date)

   and not AA.Submitted_Date is null 
   group by AA.ID, AA.Submitted_Date

这是表 A 中的日期示例

2012-11-27 00:00:00.000
2012-11-27 00:00:00.000
2012-11-27 00:00:00.000
2012-12-10 00:00:00.000
2012-11-27 00:00:00.000
2012-11-27 00:00:00.000
2012-11-29 00:00:00.000
2012-12-05 00:00:00.000
2012-12-12 00:00:00.000

这是表 X 中的日期示例

2012-11-27 00:00:00.000
2012-11-29 00:00:00.000
2012-12-05 00:00:00.000
2012-12-10 00:00:00.000
2012-12-12 00:00:00.000

这是最后一个条件之前的结果

2012-11-27 00:00:00.000
2012-11-29 00:00:00.000
2012-12-05 00:00:00.000
2012-12-10 00:00:00.000
2012-12-12 00:00:00.000

这是 A.Sub > X.Sub 的结果

2012-11-27 00:00:00.000
2012-11-29 00:00:00.000
2012-12-05 00:00:00.000
2012-12-10 00:00:00.000

我对为什么会出现这些日期感到困惑。 A 和 X 比较什么? A 中的值不会始终与 X 相同,因此导致没有最终数据吗?感谢您的帮助!

最佳答案

连接条件做两件事。首先,它确保 x.Submitted_Date 不为空。这种类型直接与其上方的 whre 语句相矛盾。在该语句中,如果 Cleared_Date 不为空,则 Submitted_Date 可以为 NULL。

非空检查只是通过使用来进行。该连接是内部连接,因此仅保留 xa 中匹配的行。当 x.Submitted_Date 为 null 时,比较 A.Submitted_Date > X.Submitted_Date 的计算结果为 FALSE(实际上为 NULL,但在此上下文中 NULL 等同于 FALSE)。

其次,它确保 laterReport 中为给定的 id 有另一条记录。这是通过相同的比较发生的:A.Submitted_Date > X.Submitted_Date 表示 A 中的记录比 X 晚。条件对 Submitted_Date 的所有值都为真,最大值除外。

因此,简而言之,条件采用除最新日期之外的所有提交日期值。

条件可能等同于:

where AA.Submitted_Date <> (select MAX(x.Submitted_Date) from Report where x.id = AA.id)

我说可能是因为Cleared_Date 使这成为问题。但是,我认为它们是一样的。只要 x.Submitted_Date 不为 NULL,原始查询中的 where 子句就会得到满足。清除日期可能会带来额外的行,但这些行的提交日期为空。因此,除了最大的提交日期之外,它正在拉动所有日期。

我想逻辑曾经更复杂,这是一个可以进一步简化的“简化”版本。

关于mysql ->、<、<>、= 内部连接条件的运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15688328/

有关mysql ->、<、<>、= 内部连接条件的运算符的更多相关文章

  1. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  2. ruby - 续集在添加关联时访问many_to_many连接表 - 2

    我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以

  3. ruby-on-rails - rspec should have_select ('cars' , :options => ['volvo' , 'saab' ] 不工作 - 2

    关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在首页我有:汽车:VolvoSaabMercedesAudistatic_pages_spec.rb中的测试代码:it"shouldhavetherightselect"dovisithome_pathit{shouldhave_select('cars',:options=>['volvo','saab','mercedes','audi'])}end响应是rspec./spec/request

  4. ruby - 触发器 ruby​​ 中 3 点范围运算符和 2 点范围运算符的区别 - 2

    请帮助我理解范围运算符...和..之间的区别,作为Ruby中使用的“触发器”。这是PragmaticProgrammersguidetoRuby中的一个示例:a=(11..20).collect{|i|(i%4==0)..(i%3==0)?i:nil}返回:[nil,12,nil,nil,nil,16,17,18,nil,20]还有:a=(11..20).collect{|i|(i%4==0)...(i%3==0)?i:nil}返回:[nil,12,13,14,15,16,17,18,nil,20] 最佳答案 触发器(又名f/f)是

  5. ruby - 如何根据特征实现 FactoryGirl 的条件行为 - 2

    我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden

  6. ruby - 无法在 60 秒内获得稳定的 Firefox 连接 (127.0.0.1 :7055) - 2

    我使用的是Firefox版本36.0.1和Selenium-Webdrivergem版本2.45.0。我能够创建Firefox实例,但无法使用脚本继续进行进一步的操作无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055)错误。有人能帮帮我吗? 最佳答案 我遇到了同样的问题。降级到firefoxv33后一切正常。您可以找到旧版本here 关于ruby-无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055),我们在StackOverflow上找到一个类

  7. ruby - 在 Ruby 中有条件地定义函数 - 2

    我有一些代码在几个不同的位置之一运行:作为具有调试输出的命令行工具,作为不接受任何输出的更大程序的一部分,以及在Rails环境中。有时我需要根据代码的位置对代码进行细微的更改,我意识到以下样式似乎可行:print"Testingnestedfunctionsdefined\n"CLI=trueifCLIdeftest_printprint"CommandLineVersion\n"endelsedeftest_printprint"ReleaseVersion\n"endendtest_print()这导致:TestingnestedfunctionsdefinedCommandLin

  8. ruby - 定义方法参数的条件 - 2

    我有一个只接受一个参数的方法:defmy_method(number)end如果使用number调用方法,我该如何引发错误??通常,我如何定义方法参数的条件?比如我想在调用的时候报错:my_method(1) 最佳答案 您可以添加guard在函数的开头,如果参数无效则引发异常。例如:defmy_method(number)failArgumentError,"Inputshouldbegreaterthanorequalto2"ifnumbereputse.messageend#=>Inputshouldbegreaterthano

  9. ruby-on-rails - Nokogiri:使用 XPath 搜索 <div> - 2

    我使用Nokogiri(Rubygem)css搜索寻找某些在我的html里面。看起来Nokogiri的css搜索不喜欢正则表达式。我想切换到Nokogiri的xpath搜索,因为这似乎支持搜索字符串中的正则表达式。如何在xpath搜索中实现下面提到的(伪)css搜索?require'rubygems'require'nokogiri'value=Nokogiri::HTML.parse(ABBlaCD3"HTML_END#my_blockisgivenmy_bl="1"#my_eqcorrespondstothisregexmy_eq="\/[0-9]+\/"#FIXMEThefoll

  10. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

随机推荐