草庐IT

条件分支

全部标签

SQL:在 1:n 关系中查找不符合跨越多行的条件的条目

我正在尝试优化Akonadi中的SQL查询,遇到了以下显然不容易用SQL解决的问题,至少对我而言:假设以下表结构(应该在SQLite、PostgreSQL、MySQL中工作):CREATETABLEa(a_idINTPRIMARYKEY);INSERTINTOa(a_id)VALUES(1),(2),(3),(4);CREATETABLEb(b_idINTPRIMARYKEY,a_idINT,nameVARCHAR(255)NOTNULL);INSERTINTOb(b_id,a_id,name)VALUES(1,1,'foo'),(2,1,'bar'),(3,1,'asdf'),(4,

mysql - 员工培训分析查询的条件查询

我需要运行训练查询以返回以下问题的结果:“谁完成了这次训练,但没有完成那次训练?”在下面的简化表中,我想知道哪个员工已完成training_id1(如completed_date字段中的日期所示),但尚未完成training_id7。+-------------+-------------+----------------+|emp_id|training_id|completed_date|+-------------+-------------+----------------+|1|1|2010-04-02|+-------------+-------------+-------

mysql - 两个索引列上的 SELECT FOR UPDATE 和 WHERE 条件 - 什么是锁定策略?

这个问题是这个问题的逻辑延续:HowmanyrowswillbelockedbySELECT...ORDERBYxxxLIMIT1FORUPDATE?假设我有这样的选择:SELECTid,statusFROMjobWHEREstatus=XXXANDidIN(1,2,3)FORUPDATEid为主键,status索引在这种情况下,MySQL的锁定策略是什么?锁定仅匹配两个条件的行锁定所有匹配第一个条件的行+分别锁定所有匹配第二个条件的行锁定整个表我认为最合乎逻辑的是2。但是...我不确定。能详细说说吗? 最佳答案 好吧,我进行了测试

mysql在不满足JOIN条件时选择虚拟记录

我有两个表,一个是点击记录,另一个是用户表。如果用户已登录,则命中会与该用户的ID一起记录。如果用户未登录,则命中记录为user_id=0当我运行报告时,我想加入对用户表的点击以获取用户名——但是没有ID为0的用户,所以我得到了错误的数据(例如,所有非登录命中)。有没有办法在不满足JOIN条件的情况下选择像“Guest”这样的虚拟用户名?这是查询:SELECTDATE_FORMAT(a.timestamp,'%Y-%m-%d')date,count(a.*)hits,a.user_id,b.usernameFROMhitsaJOINusersbONa.user_id=b.idWHERE

php - 如何在 MySQL 中的 if (like) 条件下使用不同的表

我有三个表第一张表(天)只保存值,即uid,title1,Mon2,Tue3,Wedetc,etc第二个表(查找)使用第一个表uid,day_id,date,status,tech_id1,1,2012-01-01,1,7002,2,2012-01-02,0,700etc,etc第三个表(模板)使用第一个表uid,day_id,status,tech_id1,1,1,7002,2,0,7003,3,0,700实际上,每个表都显示了更多的信息,但这些数据目前无关紧要。我试图做的是在单个SQL函数中执行所有步骤,而不是依赖代码。如果那天没有条目,我试图让SQL函数使用模板表而不是查找表在伪

mysql rand() 替代方案 [必须满足某些条件]

我当前的查询看起来像那样SELECT*FROMuploadsWHEREapproved=1AND(up-down)>=3ORDERBYRAND()LIMIT10这是从数据库中随机选择10个至少有3个喜欢多于不喜欢的条目。问题是因为我在数据库中有超过40k个条目,这个查询至少需要1秒。我在谷歌上阅读了很多内容,但到目前为止还没有找到任何东西。对于我的情况,您有什么替代方案可以推荐吗? 最佳答案 如果您要将所有匹配的记录加载到内存中,并且它们不是太多,那么最简单的答案就是在您的SQL中删除orderby,然后对它们进行排序随机在您的应用

mysql - 在 codeigniter 中使用 Where 和 Where 条件更新 SQL

这是我的代码:publicfunctionremove_employee($emp_no,$now){$this->db->delete('employees',array('emp_no'=>$emp_no));$this->db->flush_cache();$this->db->start_cache();$this->db->where('emp_no',$emp_no);$this->db->where('to_date','9999-01-01');$this->db->update('dept_emp',array('to_date'=>$now));$this->db-

java - sql - 创建单个查询以获取给定条件的值

我正在尝试创建一个将生成下表的查询。我知道列名(即每列的开始和结束日期。这些日期会根据月份/年份而有所不同。列数也会有所不同,因为有些月份可能有6周)。池的数量也可能不同。可以有'n'个池。所以我为每个池(行)和每周(列)创建了一个查询。假设有3个池(3行)和5周(5列),我可能需要运行3*5=15个查询。有什么方法可以创建单个查询来解决这个问题吗?谁能帮我解决这个问题?我还在研究这个..--------------------------------------------------row0|week1|week2|week3|week4|week5|st-end|jan1-2|j

mysql - 错误代码 : 1648. 条件项 'MESSAGE_TEXT' 的数据太长

这是我的触发器,我声明了msgvarchar(255)并且我试图将它从255更改为550但它并没有停止把那个错误代码发给我:*错误代码:1648。条件项“MESSAGE_TEXT*”的数据太长msg变量在触发器中声明;触发器是2个触发器的合并(我正在使用MySQL,我不能在一个表上对相同的操作时间和事件使用多个触发器)这是正文:----------------------------------------------------------------------------------------------------CREATETRIGGERBEFORE_INSERT_ON_S

MYSQL Left Join 条件或

好吧,我对SQL的效率不高,我尝试在左连接中使用OR语句,但发现它不起作用。我这样做的原因是因为我有两个表中的两列,如果其中一个返回NULL,我将尝试使用它们进行连接。我有两个表-事件和季节。每个表都有一个sponsorid列,我用它来加入sponsors表。这背后的原因是因为有时赞助的是单个赛事,而不是整个赛季,反之亦然。我的问题是最好的方法是什么。我的原始查询与此不同,但概念相同(除了它不会从每个表中获取每一列)。SELECTsp.*,re.*,ev.*,se.*FROMeventsevINNERJOINseasonsseONse.season_id=ev.event_sidINN