标签: where-clause

在CLAUSE中的mysql NULL值

如何 CLAUSE 中的mysql 处理NULL

我尝试了

SELECT * FROM mytable WHERE field IN(1,2,3,NULL)
Run Code Online (Sandbox Code Playgroud)

它不起作用

只有像:

SELECT * FROM mytable WHERE field IN(1,2,3) OR field IS NULL
Run Code Online (Sandbox Code Playgroud)

我怎样才能让它发挥作用WHERE IN?有可能的 ?

mysql null where-clause

10
推荐指数
3
解决办法
1万
查看次数

转换为datetime仅在WHERE子句上失败?

我遇到了一些SQL服务器查询的问题.事实证明我有一个带有"Attibute_Name"和"Attibute_Value"字段的表,它可以是任何类型,存储在varchar中.(是的,我知道.)

特定属性的所有日期似乎都存储在"YYYY-MM-DD hh:mm:ss"格式中(不是100%确定,这里有数百万条记录),所以我可以毫无问题地执行此代码:

select /*...*/ CONVERT(DATETIME, pa.Attribute_Value)
from 
    ProductAttributes pa
    inner join Attributes a on a.Attribute_ID = pa.Attribute_ID
where 
    a.Attribute_Name = 'SomeDate'
Run Code Online (Sandbox Code Playgroud)

但是,如果我执行以下代码:

select /*...*/ CONVERT(DATETIME, pa.Attribute_Value)
from 
    ProductAttributes pa
    inner join Attributes a on a.Attribute_ID = pa.Attribute_ID
where 
    a.Attribute_Name = 'SomeDate'
    and CONVERT(DATETIME, pa.Attribute_Value) < GETDATE()
Run Code Online (Sandbox Code Playgroud)

我将收到以下错误: 从字符串转换日期和/或时间时转换失败.

怎么会在where子句上失败而不是在select子句上?

另一个线索:

如果不使用Attribute_Name进行过滤,而是使用存储在数据库(PK)中的实际Attribute_ID,它将正常工作.

select /*...*/ CONVERT(DATETIME, pa.Attribute_Value)
from 
    ProductAttributes pa
    inner join Attributes a on a.Attribute_ID = pa.Attribute_ID
where 
    a.Attribute_ID = 15
    and CONVERT(DATETIME, pa.Attribute_Value) < GETDATE()
Run Code Online (Sandbox Code Playgroud)

更新 感谢大家的答案.我发现很难真正选择正确的答案,因为每个人都指出了一些对理解问题有用的东西.这绝对与执行的顺序有关.事实证明我的第一个查询正常工作,因为首先执行WHERE子句,然后执行SELECT.由于相同的原因,我的第二个查询失败(因为未过滤属性,执行相同的WHERE子句时转换失败).我的第三个查询是有效的,因为ID是索引(PK)的一部分,所以它优先,并且首先在该条件下钻取结果.

谢谢!

sql datetime where-clause sql-server-2008

10
推荐指数
2
解决办法
1万
查看次数

Linq to Entities中的动态where子句

我正在使用linq到实体(EF).我有一个构造函数,它接受4个字符串参数.根据什么参数不为null,我必须构建linq查询.我可以使用if else语句,但我也有其他10个参数的构造函数,在这种情况下,将有许多组合要检查.

例:

Constructor(p1,p2,p3,p4)
{
  var prod= from p in ctxt.products.expand("items\details")
            where p.x==p1 && p.xx==p2 && p.xxx==p3 && p.xxxx==p4
            select p;
}
Run Code Online (Sandbox Code Playgroud)

在上面的where子句中,只有当参数不为null时才应该进行条件检查.即,如果p2为null,那么where子句应如下所示

where p.x==p1 && p.xxx==p3 && p.xxxx==p4
Run Code Online (Sandbox Code Playgroud)

如果p2和p3为null则

where p.x==p1 && p.xxxx==p4
Run Code Online (Sandbox Code Playgroud)

谁能告诉我如何处理这个问题.如果可能的话,你可以为此提供示例代码

linq entity-framework dynamic where-clause

10
推荐指数
1
解决办法
1万
查看次数

使用带有多个子句的where子句删除SQLite Row

我一直在寻找并没有设法找到解决方案或工作示例,所以这里.

我已经建立了一个SQLite数据库,它有五列不同的字段,可以有效地为用户构建一个列表.列表中将有多个值相同,除了设置为自动增量的ROWID.

无论是用户还是程序都知道的ROWID一旦值已被输入到数据库中,所以我希望用户能够删除一行,如果它包含了其他领域的所有四个.

我的代码看起来像这样:

Database
            .delete(DATABASE_TABLE,
                    "KEY_DATE='date' AND KEY_GRADE='style2' AND KEY_STYLE='style' AND KEY_PUMPLEVEL='pumpLevel'",
                    null);
Run Code Online (Sandbox Code Playgroud)

但这并没有删除任何值.我几乎可以肯定这个命令的语法是罪魁祸首.

如何使用多个where子句格式化delete命令的where子句?

解决方案如下:

ourDatabase.delete(DATABASE_TABLE, "ROWID = (SELECT Max(ROWID) FROM "
            + DATABASE_TABLE + " WHERE " + "date=? AND grade=? AND "
            + "style=? AND pump_level=?)", new String[] { date, grade,
            style, pumpLevel });
Run Code Online (Sandbox Code Playgroud)

sqlite android where-clause sql-delete

10
推荐指数
2
解决办法
3万
查看次数

Linq To Sql'Where Or'运算符

我需要创建一个查询,检查字段(字符串)是否包含运行时提供的一个或多个单词.

基本上我需要能够问一个WhereOr问题.在处理LinqToSql时,这似乎应该是一个常见问题.

我找到了以下参考但是没有意义 - 并且不知道如何在我的项目中使用它.

我尝试了以下循环:

        var query = from d in context.Domains select d;
        for (int i = 0; i < words.Length; i++)
        {
            query = query.Where(d => d.Name.Contains(words[i]));
        }
Run Code Online (Sandbox Code Playgroud)

但这会构建一个带有WHERE AND子句的SQL查询,而不是OR

where where-clause linq-to-sql

9
推荐指数
1
解决办法
4125
查看次数

选择选择的结果

我有一个数据库表,记录游戏中用户的移动.每次他们移动我记录他们的用户ID,move_index(递增每一行)和他们所在区域的id.我有一个特殊的move_index值-1表示该用户的最后一次移动.

id   user_id  move_index  zone_id   
----------------------------------------------------------------
0    11        0          0  
1    11        1          0 
2    11        2          0   
3    11       -1          3    

4    22        0          0   
5    22        1          1   
6    22        2          1    
7    22       -1          3    
Run Code Online (Sandbox Code Playgroud)

我想用sql做两件事:

  • 检测在特定区域中启动和完成的所有用户(例如,在区域0中启动并在区域3中完成)
  • 扩展上述内容,检测在特定区域中启动和完成并通过特定区域的所有用户.

我知道如何使用多个SQL语句和java来执行此操作 - 但我不知道如何在单个SQL语句中执行此操作.我是否需要选择,然后选择此选择的结果?

mysql where-clause

9
推荐指数
1
解决办法
1万
查看次数

在WHERE子句中使用SELECT语句

SELECT * FROM ScoresTable WHERE Score = 
  (SELECT MAX(Score) FROM ScoresTable AS st WHERE st.Date = ScoresTable.Date)
Run Code Online (Sandbox Code Playgroud)

在WHERE子句中是否有使用SELECT语句描述的名称?这是好/坏的做法吗?

这会是一个更好的选择吗?

SELECT ScoresTable.* 
FROM ScoresTable INNER JOIN 
  (SELECT Date, MAX(Score) AS MaxScore 
  FROM ScoresTable GROUP BY Date) SubQuery 
  ON ScoresTable.Date = SubQuery.Date 
  AND ScoresTable.Score = SubQuery.MaxScore
Run Code Online (Sandbox Code Playgroud)

它不那么优雅,但似乎比我以前的版本运行得更快.我不喜欢它,因为它在GUI中没有很清楚地显示(并且需要SQL初学者理解).我可以将它分成两个单独的查询,但随后事情开始变得混乱......

NB我需要的不仅仅是日期和分数(例如姓名)

sql select where-clause

9
推荐指数
2
解决办法
10万
查看次数

为什么MySQL不在WHERE IF子句中使用索引?

由于这个设置:

mysql> show global variables like '%indexes';
+-------------------------------+-------+
| Variable_name                 | Value |
+-------------------------------+-------+
| log_queries_not_using_indexes | ON    | 
+-------------------------------+-------+
Run Code Online (Sandbox Code Playgroud)

慢查询日志继续接收:

# Time: 120607 16:58:30
# User@Host: xbtit[xbtit] @  [123.30.53.244]
# Query_time: 0  Lock_time: 0  Rows_sent: 1  Rows_examined: 16006
SELECT * FROM xbtit_files WHERE IF(soha_id is null OR soha_id = '', info_hash, soha_id)='6d63dd4ab199190b531752067414d4d6e6568f90';
Run Code Online (Sandbox Code Playgroud)

试图解释这个查询:

mysql> EXPLAIN SELECT * FROM xbtit_files WHERE IF(soha_id is null OR soha_id = '', info_hash, soha_id)='6d63dd4ab199190b531752067414d4d6e6568f90';
+----+-------------+-------------+------+---------------+------+---------+------+-------+-------------+
| id | select_type | table       | type | …
Run Code Online (Sandbox Code Playgroud)

mysql indexing where-clause

9
推荐指数
1
解决办法
1420
查看次数

如何在"Where"子句中使用"and"和"or"

我有一个基于一组条件收集信息的查询.基本上我想知道一个位置当天是否支付了超过50美元或评论部分中有"过滤器"一词......

我的查询是:

SELECT        Store_Id, Paid_Out_Amount, Paid_Out_Comment, Paid_Out_Datetime, Update_UserName, Till_Number
FROM            Paid_Out_Tb
WHERE        (Store_Id = 1929) AND (Paid_Out_Datetime >= DATEADD(day, DATEDIFF(day, 0, GETDATE()) - 1, 0)) AND (Paid_Out_Datetime < DATEADD(day, DATEDIFF(day, 0, 
                         GETDATE()), 0)) AND (Paid_Out_Amount > 50) OR
                         (Paid_Out_Comment LIKE N'%' + 'Filter' + '%')
Run Code Online (Sandbox Code Playgroud)

问题是它返回460结果,应该只返回2.

sql where-clause

9
推荐指数
3
解决办法
6万
查看次数

具有嵌套多个条件的WHERE子句

我想检索条件in WHERE子句中的数据.
这是我的表看起来像:

Name   Location    Age
----------------------
AAA     Bhuj       24
BBB     Mumbai     22
CCC     Bhuj       18
DDD     Bhuj       27
EEE     Mumbai     26
Run Code Online (Sandbox Code Playgroud)

我的WHERE条款是:
if location = 'Bhuj' then Age>20 else if location = 'Mumbai' then Age>25

我正在尝试使用此代码来实现此目的:

SELECT * FROM testing
WHERE 
CASE Location WHEN 'Bhuj' THEN Age>20
              WHEN 'Mumbai' THEN Age>25
END;
Run Code Online (Sandbox Code Playgroud)

此代码适用于MySQL(请参阅此SQLFiddle),但不适用于SQL Server(请参阅此SQLFiddle)并给出以下错误:

'>'附近的语法不正确:SELECT*FROM测试WHERE case位置当'Bhuj'然后Age> 20当'Mumbai'然后Age> 25 end

有什么建议吗?

sql sql-server case where-clause multiple-conditions

9
推荐指数
2
解决办法
3万
查看次数