草庐IT

where-clause

全部标签

mysql - 在 where 子句中使用 -(dash) 的简单选择问题

我需要搜索像1234-abc这样的值。数据库没有这个特定值,但有另一个值1234。现在的问题是当我像这样写查询时SELECT*FROMwordsWHEREtval='1234-abc'它不是获取空记录集,而是获取1234值,它似乎忽略了-之后的任何内容,知道发生了什么吗?http://sqlfiddle.com/#!2/9de62/3 最佳答案 可以使用BINARY关键字进行精确匹配SELECTtvalFROMwordsWHEREBINARYtval='1223-abc';Binary是一个内置关键字,位于WHERE子句之后,强制比

删除触发器之前的Mysql,如果没有where子句,防止删除?

我知道删除触发器中没有"new"值,所以不确定这是否可能。我正在尝试使用删除前触发器来记录一些值,效果很好,但如果用户未在where子句中指定任何内容,我还想防止删除任何记录。基本上,我不希望他们把整张table都抹掉。(应用程序开发者实际上有代码错误)目前我有:delimiter$$createtriggertg_order_shipping_bdbeforedeleteonorder_shippingFOREACHROWbegininsertintoorder_shipping_log(log_type,inv_nbr,old_tracking_nbr)values('DEL',O

mysql查询where和order by需要很长时间

我有700万条记录的mysql数据库当我像这样运行查询时select*fromdatawherecat_id=12orderbyiddesclimit0,30查询需要很长时间,比如0.4603秒但相同的查询使用out(wherecat_id=12)或使用out(orderbyiddesc)非常快查询需要很长时间,比如0.0002秒我有cat_id和id的索引有任何方法可以快速查询(whereandorderby)谢谢 最佳答案 创建一个结合了cat_id和id的复合索引。参见http://dev.mysql.com/doc/refm

mysql - JOIN 与 WHERE : Why do two queries that obtain identical results exhibit 3-4 orders of magnitude performance difference?

今晚早些时候,我问了thisquestiononStackOverflow关于如何编写SQL查询以通过仅返回在一个字段中具有重复项的行来过滤表中的行。这里是问题,为方便起见重复:如果我有这些数据:code1code2110...我想编写一个单个SQL查询,其结果如下:code1code2110(即,返回code1列中的任何数据多次出现的所有行的单个SQL查询)...我该怎么做?我receivedananswer有两个可能的SQL查询,它们都能完美地工作。成功的SQL#1:SELECTcode1,code2FROMmyTableWHEREcode1IN(SELECTcode1FROMmy

mysql - select * where id in (....) 和所有 columX 都相等

大家好,我必须处理一个特殊的问题。首先这是简化表:id|A|B-------------1|a|12|b|23|c|14|d|15|e|36|f|17|g|2多亏了一个相当蹩脚的API,我得到了一个所需的ID列表,比如(1,2,3,5,6)但是,在此列表中,我必须仅选择B列中具有特定未知值的行。在此示例中,未知值将为1,因为第一个匹配的ID在B列。因此我需要这些行1,3,4,6因为必需第2行和第6行在B列中具有不同的值。我希望你能跟到这里。问题已经通过在软件中过滤结果解决了,但我想知道是否有纯SQL的解决方案?数据库是MySQL,我没有机会更改表或API,因为这是现有软件的插件:(提前

mysql - 像 'where created_at > ?' 这样的查询时索引是否工作

我正在使用Postgresql,需要进行类似“WHEREcreated_at>?”的查询。我不确定索引是否适用于此类查询。我做过一个实验。在created_at列上添加索引后,我解释了以下2个查询。1)EXPLAINSELECT*FROMcategoriesWHEREcreated_at>'2014-05-0321:34:27.427505';结果是QUERYPLAN------------------------------------------------------------------------------------SeqScanoncategories(cost=0.

mysql - 简单查询优化(WHERE + ORDER + LIMIT)

我的查询运行速度慢得令人难以置信(4分钟):SELECT*FROM`ad`WHERE`ad`.`user_id`=USER_IDORDERBY`ad`.`id`descLIMIT20;广告表大约有1000万行。SELECTCOUNT(*)FROM`ad`WHERE`ad`.`user_id`=USER_ID;返回10k行。表有以下索引:PRIMARYKEY(`id`),KEY`idx_user_id`(`user_id`,`status`,`sorttime`),EXPLAIN给出了这个:id:1select_type:SIMPLEtable:adtype:indexpossible_

mysql - 查询结果作为 MySQL 中 WHERE 语句的参数

我有两个表:订单和订单产品。它们都有一个名为“order_id”的列。订单有一个名为“date_created”的列ordersProducts有一个名为“SKU”的列我想在一个日期范围内选择SKU。到目前为止我的查询是:SELECT`SKU`FROM`orderProducts`INNERJOINordersONorderproducts.order_id=orders.order_idWHEREorders.order_idin(SELECTidFROMordersWHEREdate_createdBETWEEN'2014-10-01'AND'2015-03-31'ORDERBYd

mysql - 使用字符串替换更新时是否应该添加 WHERE 子句

我想对整个列执行字符串替换,将一个短语的所有实例更改为另一个:UPDATE`some_records`SET`some_column`=REPLACE(`some_column`,'foo','bar');由于许多行不包含字符串“foo”,因此它们将不受此查询的影响,这很好;我只关心包含它的行。我的问题是,是否有任何理由添加WHERE子句以明确定位将受影响的行?例如UPDATE`some_records`SET`some_column`=REPLACE(`some_column`,'foo','bar')WHERE`some_column`LIKE'%foo%';据我所知,这两个查询具

MySQL 5.6 长 WHERE IN 查询非常慢

自MySQL5.6版本以来,一个非常简单但很长的查询比5.4版本需要更长的订单数。架构:三个表,一个包含元素,一个包含类别,还有一个M:N表。创建语句:CREATETABLEelement(idint(11)NOTNULLAUTO_INCREMENT,namevarchar(255)CHARACTERSETutf8COLLATEutf8_binNOTNULL,PRIMARYKEY(id))ENGINE=InnoDBAUTO_INCREMENT=4257455DEFAULTCHARSET=utf8COLLATE=utf8_unicode_ci;CREATETABLEcategory(id