我有两个表:
表 1:问题:
QuestionId NUMERIC
Title TEXT
题表中的测试数据:
QuestionId Title
1 What is your name?
2 What is your age?
表 2:答案:
AnswerId NUMERIC
PersonId NUMERIC
QuestionId NUMERIC
Answer TEXT
如果答案表中没有数据,则下面的查询返回正确的结果(2 行):
SELECT q.QuestionId, q.Title, a.Answer
FROM Questions q
LEFT OUTER JOIN Answers a ON q.QuestionId = a.QuestionId
WHERE a.PersonId = 2 OR a.PersonId IS null
但是如果我在答案表中有例如 1 条记录,例如:
AnswerId 1
PersonId 1
QuestionId 1
Answer 'My Name is Yaqub'
下面的查询工作正常:
SELECT q.QuestionId, q.Title, a.Answer
FROM Questions q
LEFT OUTER JOIN Answers a ON q.QuestionId = a.QuestionId
WHERE a.PersonId = 1 OR a.PersonId IS null
但是这个查询只返回一行:
SELECT q.QuestionId, q.Title, a.Answer
FROM Questions q
LEFT OUTER JOIN Answers a ON q.QuestionId = a.QuestionId
WHERE a.PersonId = 2 OR a.PersonId IS null
上面的查询只返回一行错误,因为我在问题表中有两个问题&上面的查询应该返回它们,因为条件'OR a.PersonId IS null'。
为什么它不返回两行?
期望的结果:
我想获取所有问题(2 行)和那些 PersonId 具有某些值的答案,例如,Person 2 的两行,因为我在答案表中没有他的数据。
最佳答案
我找到了解决方案:
SELECT q.QuestionId, q.Title, a.Answer
FROM Questions q
LEFT OUTER JOIN Answers a ON q.QuestionId = a.QuestionId AND
(a.PersonId = 2 OR a.PersonId IS null)
此查询将列出所有问题,WHERE 子句将过滤掉 PersonID 具有特定值或为空的那些答案。因此,只要有问题的答案,我就不会得到 PersonID 的 NULL 值。
关于SQLite LEFT JOIN 和 WHERE 子句混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11219440/
我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que
这段代码没有像我预期的那样执行:casewhen->{false}then"why?"else"ThisiswhatIexpect"end#=>"why?"这也不是casewhen->(x){false}then"why?"else"ThisiswhatIexpect"end#=>"why?"第一个then子句在两种情况下都被执行,这意味着我提供给when子句的lambda没有被调用。我知道无论when子句的主题是什么,都应该调用大小写相等运算符===。我想知道当没有为case提供参数时,===的另一边会发生什么。我在想它可能是nil,但它不可能是:->{false}===nil#=>
可能真的很简单,但我很难在网上找到关于这个的文档我在Ruby中有两个activerecord查询,我想通过OR运算符连接在一起@pro=Project.where(:manager_user_id=>current_user.id)@proa=Project.where(:account_manager=>current_user.id)我是ruby的新手,但我自己尝试使用||@pro=Project.where(:manager_user_id=>current_user.id||:account_manager=>current_user.id)这没有用,所以1.我想知道如何在
我在Ruby中遇到了一个关于Dir[]和File.join()的简单程序,blobs_dir='/path/to/dir'Dir[File.join(blobs_dir,"**","*")].eachdo|file|FileUtils.rm_rf(file)ifFile.symlink?(file)我有两个困惑:首先,File.join(@blobs_dir,"**","*")中的第二个和第三个参数是什么意思?其次,Dir[]在Ruby中有什么用?我只知道它等价于Dir.glob(),但是,我对Dir.glob()确实不是很清楚。 最佳答案
这可能是一段很长的时间,但如果存在的话会让生活变得更轻松一些。无论如何,这都是场景。我有一个散列数组,其中一个键的值是另一个散列.......是的,我知道。这里有一个更好的解释:@myArrayOfStuff[0]@myArrayOfStuff[0]["single-key"]@myArrayOfStuff[0]["single-key"]["object-identifier"]第一个返回一个散列。第二个将返回一个对象(在我的例子中称为页面,但示例使用不同的名称)第三个返回我作为对象标识符引用的任何变量。足够简单。我想做的是选择另一个对象标识符值不为零或大于x的数组。类似于activ
在我的schedule.rb文件中,我有以下几行:set:output,'/log/cron_log.log'every5.minutesdocommand'echo"hello"'end我按照这个问题Rails,usingwhenevergemindevelopment中的建议运行了whenever-w,并且我假设cronfile已编写并正在运行。(我也尝试重新启动Rails服务器。)当我运行$crontab-l时,我看到以下内容:0,5,10,15,20,25,30,35,40,45,50,55****/bin/bash-l-c'echo"hello">>/log/cron_log
请有人帮助我了解ruby应用程序如何管理应用程序的gemfile和rvmgemsets。如果我当前使用的是Gemset,安装了一堆gem,并且我的gemfile中也有gems,那么Ruby应用程序是使用gemfile中的gem还是应用程序的gemset中的gem? 最佳答案 要理解这一点,您需要退后一步,了解rubygems的一般工作原理。让我们从一个没有rvm或Gemfile的系统开始。当您通过“geminstall”安装gem时,它会进入系统gem位置。每当您编写ruby脚本并需要gem时,它就会从那里获取。现在假设
我有一个看起来像这样的类:classFoo在测试#nasty_bars_present?我想编写一个rspec测试来对bars关联进行stub,但允许where自然执行。像这样的东西:describe"#nasty_bars_present?"docontext"withnastybars"dobefore{foo.stub(:bars).and_return([mock(Bar,bar_type:"Nasty")])}it"shouldreturntrue"doexpect(foo.nasty_bars_present?).tobe_trueendendend上面的测试给出了一个关于
考虑以下代码片段:defsqlbilling_requests.project(billing_requests[Arel.star]).where(filter_by_day.and(filter_by_merchant).and(filter_by_operator_name)).to_sqlenddeffilter_by_daybilling_requests[:created_at].gteq(@start_date).and(billing_requests[:created_at].lteq(@end_date))enddeffilter_by_operator_nameu
根据AWSDocs:Anupdateexpressionconsistsofoneormoreclauses.EachclausebeginswithaSET,REMOVE,ADDorDELETEkeyword.Youcanincludeanyoftheseclausesinanupdateexpression,inanyorder.However,eachactionkeywordcanappearonlyonce.我无法在一个update_expression中获得正确的SET和REMOVE语法:params={key:{'id'=>{s:'123'}},table_name:'c