当尝试在 SQL 查询中使用 IN 运算符从表中获取数据时,如果没有行可用于该条件,则不会返回任何行,如下例所示:
mysql> SELECT * FROM employee_tbl;
+------+------+------------+--------------------+
| id | name | work_date | daily_typing_pages |
+------+------+------------+--------------------+
| 1 | John | 2007-01-24 | 250 |
| 2 | Ram | 2007-05-27 | 220 |
| 3 | Jack | 2007-05-06 | 170 |
| 3 | Jack | 2007-04-06 | 100 |
| 4 | Jill | 2007-04-06 | 220 |
| 5 | Zara | 2007-06-06 | 300 |
| 5 | Zara | 2007-02-06 | 350 |
+------+------+------------+--------------------+
mysql> SELECT daily_typing_pages FROM employee_tbl WHERE name IN ( 'John','Ram' ,'XYZ');
O/p 将如下所示,只有 2 行:
daily_typing_pages |
--------------------+
250 |
220 |
我需要的是在值不匹配的情况下有一些常量值。所以我期待的输出是
daily_typing_pages |
--------------------+
250 |
220 |
100 |
这有可能实现吗?
编辑:最后设置 SQL 的值。
最佳答案
好吧,您有多种选择可以实现这一目标。但是,它们中的大多数都是“绕过”问题的解决方法。问题很简单,您的数据不一致。选择一个不存在的用户应该不会产生任何结果(这会发生但不是您想要的结果)。
选项 1.) 修复数据:将缺失的用户 XY 插入表中,将未设置的值保留为 NULL。 (然后您可以使用 IFNULL(pages, 100) 或您喜欢的任何默认值
选项 2.) Str2Rows:您可以创建一个存储过程或函数,它允许您动态地将给定的字符串(如 A,B,C)转换为一个三行的临时表,因此您可以在您的左/右加入 employee_tbl。
选项 3.) 结果表:创建一个表,等于您的用户表。仅插入您要查询的名称和默认值。然后从您的员工表中执行 SELECT INTO。 (XY 的默认值将保持不变)
选项 4.) 在 SQL 之外为非现有用户插入值(因此在显示结果时)
然而,修复原因比消除症状“更好”,所以我建议您选择选项 1。
编辑:选项 3 可能如下所示:http://sqlfiddle.com/#!2/82f9e/2
1.) 清除结果表(请注意,名称必须是唯一的才能使 Replace 起作用)
2.) 将您需要的结果插入到您的结果表中:
INSERT InTO employee_result (name,pages) VALUES ("John", NULL);
INSERT InTO employee_result (name,pages) VALUES ("Ram", NULL);
INSERT InTO employee_result (name,pages) VALUES ("XY", NULL);
3.) 为那些有值的用户替换空值:
REPLACE INTO employee_result (name, pages) SELECT name, pages FROM employee_tbl
WHERE name in (SELECT name FROM employee_result);
4.) 检索结果集并为那些没有自己值的设置默认值。
SELECT name, IFNULL(pages,100) from employee_result;
这也可以被“修改”为与存储过程和临时表一起工作。 (那就是选项 2)
希望对您有所帮助。
关于mysql - 需要为不返回值的 SQL IN 获取常量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16029205/
当我使用Bundler时,是否需要在我的Gemfile中将其列为依赖项?毕竟,我的代码中有些地方需要它。例如,当我进行Bundler设置时:require"bundler/setup" 最佳答案 没有。您可以尝试,但首先您必须用鞋带将自己抬离地面。 关于ruby-我需要将Bundler本身添加到Gemfile中吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4758609/
在我的gem中,我需要yaml并且在我的本地计算机上运行良好。但是在将我的gem推送到rubygems.org之后,当我尝试使用我的gem时,我收到一条错误消息=>"uninitializedconstantPsych::Syck(NameError)"谁能帮我解决这个问题?附言RubyVersion=>ruby1.9.2,GemVersion=>1.6.2,Bundlerversion=>1.0.15 最佳答案 经过几个小时的研究,我发现=>“YAML使用未维护的Syck库,而Psych使用现代的LibYAML”因此,为了解决
为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返
我注意到像bundler这样的项目在每个specfile中执行requirespec_helper我还注意到rspec使用选项--require,它允许您在引导rspec时要求一个文件。您还可以将其添加到.rspec文件中,因此只要您运行不带参数的rspec就会添加它。使用上述方法有什么缺点可以解释为什么像bundler这样的项目选择在每个规范文件中都需要spec_helper吗? 最佳答案 我不在Bundler上工作,所以我不能直接谈论他们的做法。并非所有项目都checkin.rspec文件。原因是这个文件,通常按照当前的惯例,只
我正在使用active_admin,我在Rails3应用程序的应用程序中有一个目录管理,其中包含模型和页面的声明。时不时地我也有一个类,当那个类有一个常量时,就像这样:classFooBAR="bar"end然后,我在每个必须在我的Rails应用程序中重新加载一些代码的请求中收到此警告:/Users/pupeno/helloworld/app/admin/billing.rb:12:warning:alreadyinitializedconstantBAR知道发生了什么以及如何避免这些警告吗? 最佳答案 在纯Ruby中:classA
我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
我有一个包含多个键的散列和一个字符串,该字符串不包含散列中的任何键或包含一个键。h={"k1"=>"v1","k2"=>"v2","k3"=>"v3"}s="thisisanexamplestringthatmightoccurwithakeysomewhereinthestringk1(withspecialcharacterslike(^&*$#@!^&&*))"检查s是否包含h中的任何键的最佳方法是什么,如果包含,则返回它包含的键的值?例如,对于上面的h和s的例子,输出应该是v1。编辑:只有字符串是用户定义的。哈希将始终相同。 最佳答案
有没有办法在这个简单的get方法中添加超时选项?我正在使用法拉第3.3。Faraday.get(url)四处寻找,我只能先发起连接后应用超时选项,然后应用超时选项。或者有什么简单的方法?这就是我现在正在做的:conn=Faraday.newresponse=conn.getdo|req|req.urlurlreq.options.timeout=2#2secondsend 最佳答案 试试这个:conn=Faraday.newdo|conn|conn.options.timeout=20endresponse=conn.get(url
我有用于控制用户任务的Rails5API项目,我有以下错误,但并非总是针对相同的Controller和路由。ActionController::RoutingError:uninitializedconstantApi::V1::ApiController我向您描述了一些我的项目,以更详细地解释错误。应用结构路线scopemodule:'api'donamespace:v1do#=>Loginroutesscopemodule:'login'domatch'login',to:'sessions#login',as:'login',via::postend#=>Teamroutessc