我正在经历一些我正在维护的查询,并且程序员已经向我提出了"其中1 = 1"的查询,似乎总是评估为真.
这有好处吗?
重复: 为什么有人在SQL子句中使用WHERE 1 = 1 AND?
这个问题不是这个问题的答案.
WHERE子句:
select * from table where 1=1 and sStatus not in ('status1','status2','status3')
Run Code Online (Sandbox Code Playgroud)
没有编程或如果声明推动和在那里.直接查询.
如果你可以取消关闭它,我想知道是否有目的,以便我可以重写并删除1 = 1,如果没有必要.
按@Cesar要求更新.希望我明白你想要什么,如果没有,请恢复.Quassnoi.
如果我这样做一个SQL查询:SELECT * FROM TABLE_NAME WHERE b IN (2, 7) AND c IN (3, 9),我可以假设MySQL只匹配每个列表中具有相同编号的元素的对吗?
也就是说,(2, 3),(7, 9),...?
例如,假设我们有一个这样的表:
+----------+----------+----------+ | PK | b | c | +----------+----------+----------+ | 1 | 2 | 3 | +----------+----------+----------+ | 2 | 5 | 4 | +----------+----------+----------+ | 3 | 7 | 9 | +----------+----------+----------+ | 4 | 7 | 4 | +----------+----------+----------+ | 5 | 2 | 9 | +----------+----------+----------+ …
我有这样的查询:
SELECT fields FROM table
WHERE field1='something' OR field2='something'
OR field3='something' OR field4='something'
Run Code Online (Sandbox Code Playgroud)
为此查询索引此类表的正确方法是什么?
像这样的查询需要一整秒才能运行!我有1个索引,其中包含所有4个字段,所以我认为mysql会做这样的事情:
浏览索引中的每一行,想一想:field1是什么?field2怎么样?字段3?字段4?好的,不,转到下一行.
我想用不同的密钥搜索我的数据库.根据输入,10键可能有1个键.有没有办法动态地向我的Linq查询添加OR/AND子句?
keys[k] // I have my keys in this array
var feedList = (from feed in ctx.Feed
where feed.content.contains(keys[0])
&& feed.content.contains(keys[1])
&& ... // continues with the keys.length
select new {
FeedId = feed.DuyuruId,
FeedTitle = feed.FeedTitle,
FeedContent = feed.FeedContents,
FeedAuthor = user.UserName + " " +User.UserSurname
}
Run Code Online (Sandbox Code Playgroud) 我试图从另一个表中尚未出现的表中获取结果.为此,我在where子句中使用subQuery和NOT IN表达式.正常的sql工作如下:
SELECT `products`.* FROM `products` WHERE `products`.`pro_id` **NOT IN** (
SELECT `product_collection`.`pro_id` AS `pro_id` FROM `product_collection` WHERE `coll_id` = '6' ) AND products.pro_id IN (55,56,57,62)
Run Code Online (Sandbox Code Playgroud)
我正在为项目使用zf2.问题是我不知道如何在where子句中使用NOT IN表达式.我们可以在Where子句中使用where-> in()作为IN表达式.例如.
//$productIds is an array
//$collectionId is an id
$subSelect = $this->getRawSql()->select('product_collection');
$subSelect -> columns(array('pro_id'));
$subSelect -> where(array('coll_id'=>$collectionId));
$select = $this->getRawSql()->select('products');
$select -> **where->in**('products.pro_id', $subSelect)
-> where->in('products.pro_id',$productIds);
Run Code Online (Sandbox Code Playgroud)
但我不知道如何使用NOT IN表达式.
我需要插入或更新,我发现SQLiteDatabase的方法insertWithOnConflict,但我不知道如何检查该条目是否已存在.
从理论上讲,我需要一个"Where"参数来检查某个ID是否存在,如果存在,它应该替换所有其他列.
这就是我现在所拥有的,但我不认为第二个参数是唯一的id
ContentValues args = new ContentValues();
args.put(AppDatabase.COLUMN_ID, entry.getId());
args.put(AppDatabase.COLUMN_NAME, entry.getAppname());
args.put(AppDatabase.COLUMN_URL, entry.getAppUrl());
database.insertWithOnConflict(AppDatabase.TABLE_FILELIST, COLUMN_ID, args, SQLiteDatabase.CONFLICT_REPLACE);
Run Code Online (Sandbox Code Playgroud)
我该如何管理这种行为?
我正在尝试检查linq中的日期是否为空,如果没有检查它的未来日期.
QuestionnaireRepo.FindAll(q => !q.ExpiredDate.HasValue || q.ExpiredDate >DateTime.Now).OrderByDescending(order => order.CreatedDate);
Run Code Online (Sandbox Code Playgroud)
我需要第二次检查才能申请,如果第一次是真的.我使用单个存储库模式,FindAll接受了where子句
有任何想法吗?这里有很多类似的问题,但没有给出答案,我对Linq很新,你可能已经猜到了:)
编辑:我得到了我现在需要的结果,但在某些情况下它将检查>条件值为null值.这不是坏事吗?
所以我有一张表格如下
Date Time Field3 Field4 - etc.
--------------------------------------------------
05/07/11 17:45 blah blah
05/07/11 19:45 blah blah
08/07/11 17:30
08/07/11 19:00
09/07/11 19:00
Run Code Online (Sandbox Code Playgroud)
等等
我目前在我的WHERE声明中有一条规则,因此显示今天之间的所有日期(所以它将是05/07/11直到3年后的同一日期05/07/14).
我还想在WHERE语句下添加另一个规则,以便它只显示当前时间前两小时的时间(当前日期等于表中的日期).
所以在05/07/11 19:00它应该显示:
Date Time Field3 Field4 - etc.
--------------------------------------------------
05/07/11 17:45 blah blah
05/07/11 19:45 blah blah
08/07/11 17:30
08/07/11 19:00
09/07/11 19:00
Run Code Online (Sandbox Code Playgroud)
在同一天21:46,现在应该显示:
Date Time Field3 Field4 - etc.
--------------------------------------------------
08/07/11 17:30
08/07/11 19:00
09/07/11 19:00
Run Code Online (Sandbox Code Playgroud)
我将如何在我的SQL中执行此操作?我认为它必须是if then或case当时声明,但我还没有能够解决它?
ALSO日期是在VB.Net中生成的,所以时间也是如此.当前的sql(和工作)代码是:
SELECT m.MatchID Manage, m.Date, m.Time, t.TeamCode "Home", b.TeamCode "Away",
g.GroundName "Ground", ( SUBSTRING(u.GivenName,1,1) + '. …Run Code Online (Sandbox Code Playgroud) 我已经看过这个关于如何在Entity Framework中动态创建OrderBy表达式的答案.但我还想构建一个动态Where表达式.有点像这样:
public IEnumerable<InventoryItem> GetAll(string filterBy, object value)
{
var results = new List<InventoryItem>();
using (var db = new InventoryDb())
{
if (QueryHelper.PropertyExists<InventoryItem>(filterBy))
{
var query = db.rri_InventoryItems.WhereByProperty(filterBy, value);
foreach(var item in query.Where(expr))
{
results.Add(ConvertItem(item));
}
}
}
return results;
}
Run Code Online (Sandbox Code Playgroud)
传入属性以过滤by和值作为ab对象.Queryable有两种方法,哪里都有两个参数,所以我甚至不确定哪一个是正确的.
而且在这一点上我失去了一点点.我不确定如何重构原始的OrderByProerty方法来提供WhereByProperty.我知道我在这里完全错了.我不知道该怎么做.
理想情况下,我想通过提供可用于使用ands和or运算符构建查询的对象集合来进一步扩展它.
我试图在where子句中使用函数执行的结果,但没有成功:
SELECT clinics.*, distance_between_objects(1, id, 7, 3) AS dist FROM clinics WHERE dist<=1;
Run Code Online (Sandbox Code Playgroud)
给我:Column "dist" does not exists。引用它就像:
SELECT clinics.*, distance_between_objects(1, id, 7, 3) AS dist FROM clinics WHERE "dist"<=1;
Run Code Online (Sandbox Code Playgroud)
也没有帮助。请告知Postgres是否有可能在WHERE子句中使用函数结果而不调用它两次?谢谢!
where-clause ×10
linq ×3
sql ×3
mysql ×2
android ×1
c# ×1
evaluation ×1
indexing ×1
postgresql ×1
select ×1
sql-function ×1
sqlite ×1
time ×1