草庐IT

mysql - 仅当每个元素都满足条件时才选择组

coder 2023-10-24 原文

我有这样简单的数据库方案:Child one----many SchoolPreferences

子表包括:

ChildId, Name, Surname, Age

SchoolPreferences 包括:

PreferenceId, ChildId, PreferenceNumber, SchoolName

这是为了招聘到学校。每个 child 最多可以选择 3 所他们想去的学校。如果他们在 PreferenceNumber 1 中被接受,那么他们会去 那所学校,如果他们不符合条件,他们会进入 PreferenceNumber 2,如果他们在那里失败,那么他们最后的机会就是进入第三优先学校。

我需要选择仅被选为 PreferenceNumber 1 的学校。因此,如果任何 child 选择学校作为 PreferenceNumber 2 或 3,则该学校根本不应出现在结果中。

到目前为止,我只知道如何选择单个行,但我需要的是过滤组,因此每个学校都是一个组,如果任何偏好 > 1,那么整个组不应出现在结果中。

到目前为止我有这个,但正如我所说,它只适用于个别行,不适用于学校:

select SchoolPreferences.PreferenceId,
    Children.name,
    Children.Surname
from Children
inner join SchoolPreferences on Children.ChildId = SchoolPreferences.ChildId
group by SchoolPreferences.PreferenceId,
    Children.name,
    Children.Surname
having (((SchoolPreferences.PreferenceNumber) = 1));

最佳答案

反连接模式可以解决问题。不需要 child 表。看起来我们拥有的学校唯一标识符是 schoolname

如果我理解规范,返回学校列表 (schoolname),它仅作为 preferencenumber 1 出现,而​​没有作为任何其他 preferencenumber 出现...

像这样:

 SELECT p1.schoolname
   FROM SchoolPreferences p1
   LEFT
   JOIN SchoolPreferences pn
     ON pn.schoolname = p1.schoolname
    AND pn.preferencenumber <> 1
  WHERE pn.schoolname IS NULL
    AND p1.preferencenumber = 1
  GROUP
     BY p1.schoolname

还有其他返回等效结果的查询模式,例如

 SELECT p1.schoolname
   FROM SchoolPreferences p1
  WHERE p1.preferencenumber = 1
    AND NOT EXISTS 
        ( SELECT 1
            FROM SchoolPreferences pn
           WHERE pn.schoolname = p1.schoolname
             AND pn.preferencenumber <> 1
        )
  GROUP
     BY p1.schoolname

如果我们希望将学校作为 preferencenumber 1 的 child 包括在内,我们删除 GROUP BY,然后我们可以连接到 Children

 SELECT p1.schoolname

      , p1.preferenceid
      , p1.childid
      , ch.name
      , ch.surname

   FROM SchoolPreferences p1

   JOIN Children ch
     ON ch.childid = p1.childid

   LEFT
   JOIN SchoolPreferences pn
     ON pn.schoolname = p1.schoolname
    AND pn.preferencenumber <> 1
  WHERE pn.schoolname IS NULL
    AND p1.preferencenumber = 1

  ORDER
     BY p1.schoolname
      , p1.childid

关于mysql - 仅当每个元素都满足条件时才选择组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43019280/

有关mysql - 仅当每个元素都满足条件时才选择组的更多相关文章

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

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

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

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

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

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

  4. ruby - Rails 3 的 RGB 颜色选择器 - 2

    状态:我正在构建一个应用程序,其中需要一个可供用户选择颜色的字段,该字段将包含RGB颜色代码字符串。我已经测试了一个看起来很漂亮但效果不佳的。它是“挑剔的颜色”,并托管在此存储库中:https://github.com/Astorsoft/picky-color.在这里我打开一个关于它的一些问题的问题。问题:请建议我在Rails3应用程序中使用一些颜色选择器。 最佳答案 也许页面上的列表jQueryUIDevelopment:ColorPicker为您提供开箱即用的产品。原因是jQuery现在包含在Rails3应用程序中,因此使用基

  5. ruby - 在哈希的键数组中追加元素 - 2

    查看我的Ruby代码:h=Hash.new([])h[0]=:word1h[1]=h[1]输出是:Hash={0=>:word1,1=>[:word2,:word3],2=>[:word2,:word3]}我希望有Hash={0=>:word1,1=>[:word2],2=>[:word3]}为什么要附加第二个哈希元素(数组)?如何将新数组元素附加到第三个哈希元素? 最佳答案 如果您提供单个值作为Hash.new的参数(例如Hash.new([]),完全相同的对象将用作每个缺失键的默认值。这就是您所拥有的,那是你不想要的。您可以改用

  6. 使用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

  7. 「Python|Selenium|场景案例」如何定位iframe中的元素? - 2

    本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决

  8. ruby - Hanami link_to 助手只呈现最后一个元素 - 2

    我是HanamiWorld的新人。我已经写了这段代码:moduleWeb::Views::HomeclassIndexincludeWeb::ViewincludeHanami::Helpers::HtmlHelperdeftitlehtml.headerdoh1'Testsearchengine',id:'title'hrdiv(id:'test')dolink_to('Home',"/",class:'mnu_orizontal')link_to('About',"/",class:'mnu_orizontal')endendendendend我在模板上调用了title方法。htm

  9. 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

  10. ruby-on-rails - 在 haml View 中重构条件 - 2

    除了可访问性标准不鼓励使用这一事实指向当前页面的链接,我应该怎么做重构以下View代码?#navigation%ul.tabbed-ifcurrent_page?(new_profile_path)%li{:class=>"current_page_item"}=link_tot("new_profile"),new_profile_path-else%li=link_tot("new_profile"),new_profile_path-ifcurrent_page?(profiles_path)%li{:class=>"current_page_item"}=link_tot("p

随机推荐