如何在 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?有可能的 ?
我遇到了一些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)的一部分,所以它优先,并且首先在该条件下钻取结果.
谢谢!
我正在使用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)
谁能告诉我如何处理这个问题.如果可能的话,你可以为此提供示例代码
我一直在寻找并没有设法找到解决方案或工作示例,所以这里.
我已经建立了一个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) 我需要创建一个查询,检查字段(字符串)是否包含运行时提供的一个或多个单词.
基本上我需要能够问一个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
我有一个数据库表,记录游戏中用户的移动.每次他们移动我记录他们的用户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做两件事:
我知道如何使用多个SQL语句和java来执行此操作 - 但我不知道如何在单个SQL语句中执行此操作.我是否需要选择,然后选择此选择的结果?
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我需要的不仅仅是日期和分数(例如姓名)
由于这个设置:
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) 我有一个基于一组条件收集信息的查询.基本上我想知道一个位置当天是否支付了超过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.
我想检索条件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
有什么建议吗?
where-clause ×10
sql ×4
mysql ×3
android ×1
case ×1
datetime ×1
dynamic ×1
indexing ×1
linq ×1
linq-to-sql ×1
null ×1
select ×1
sql-delete ×1
sql-server ×1
sqlite ×1
where ×1