我一直在争夺这一个.我有一个存储过程,它接受3个用于过滤的参数.如果传入特定值,我想对其进行过滤.如果传入-1,请全部给我.
我试过以下两种方式:
第一种方式:
SELECT field1, field2...etc
FROM my_view
WHERE
parm1 = CASE WHEN @PARM1= -1 THEN parm1 ELSE @PARM1 END
AND parm2 = CASE WHEN @PARM2 = -1 THEN parm2 ELSE @PARM2 END
AND parm3 = CASE WHEN @PARM3 = -1 THEN parm3 ELSE @PARM3 END
Run Code Online (Sandbox Code Playgroud)
第二种方式:
SELECT field1, field2...etc
FROM my_view
WHERE
(@PARM1 = -1 OR parm1 = @PARM1)
AND (@PARM2 = -1 OR parm2 = @PARM2)
AND (@PARM3 = -1 OR parm3 = @PARM3)
Run Code Online (Sandbox Code Playgroud)
我读到某处,第二种方式会短路,如果是真的话,永远不会评估第二种方式.我的DBA说它强制进行表扫描.我还没有验证这一点,但在某些情况下似乎运行速度较慢.
此视图选择的主表有大约150万条记录,并且视图继续加入大约15个其他表以收集大量其他信息.
这两种方法都很慢......把我从瞬间带到2-40秒的任何地方,这在我的情况下是完全不可接受的.
是否有更好的方法不涉及将其分解为特定vs …
如果没有匹配的案例块,有没有办法运行代码块?例如:
switch($a) {
case // {}
case // {}
...
# DO SOMETHING IF NONE OF THE ABOVE CASES WERE MATCHED
}
Run Code Online (Sandbox Code Playgroud)
else 不是我想要的,因为它只适用于最后一个案例块.
如果我有一个类在其构造函数中采用元组和其他值,例如:
class Foo(a: Int, b: String, c: (Int, String))
Run Code Online (Sandbox Code Playgroud)
如何使用抽象类型以轻量级方式为元组提供更具描述性的名称(不将其包装在新类中):
class Foo(a: Int, b: String, c: Dave)
Run Code Online (Sandbox Code Playgroud)
我不确定如何在范围内引入类型别名(或者如果这是最好的事情):
type Dave = (Int, String)
Run Code Online (Sandbox Code Playgroud)
是否存在以这种方式定义类型的约定(或者我应该定义案例类并包装所有内容......)?
我很欣赏它在很多情况下没有意义,但如果我真的只是在寻找一个更具描述性的名字,那么它有可能吗?
谢谢!
我有以下查询在Postgres 9.1中很有用:
SELECT users.id, GREATEST(
COALESCE(MAX(messages.created_at), '2012-07-25 16:05:41.870117'),
COALESCE(MAX(phone_calls.created_at), '2012-07-25 16:05:41.870117')
) AS latest_interaction
FROM users LEFT JOIN messages ON users.id = messages.user_id
LEFT JOIN phone_calls ON users.id = phone_calls.user_id
GROUP BY users.id
ORDER BY latest_interaction DESC
LIMIT 5;
Run Code Online (Sandbox Code Playgroud)
但我想做的是这样的事情:
SELECT users.id, GREATEST(
COALESCE(MAX(messages.created_at), '2012-07-25 16:05:41.870117'),
COALESCE(MAX(phone_calls.created_at), '2012-07-25 16:05:41.870117')
) AS latest_interaction
FROM users LEFT JOIN messages ON users.id = messages.user_id
LEFT JOIN phone_calls ON users.id = phone_calls.user_id
GROUP BY users.id
ORDER BY
CASE WHEN(
latest_interaction > '2012-09-05 16:05:41.870117')
THEN …Run Code Online (Sandbox Code Playgroud) 刚开始使用Doctrine ORM for PHP(v1.1.5)并遇到意想不到的事情.
我正在使用db(MySQL 4)生成模型:
Doctrine::generateModelsFromDb($pathToModels);
Run Code Online (Sandbox Code Playgroud)
然后使用以下方法从模型生成YAML:
Doctrine::generateYamlFromModels($pathToSchema . '/schema.yml', $pathToModels);
Run Code Online (Sandbox Code Playgroud)
在生成的模型中,列名称(如在中所定义hasColumn())对字段使用与db中相同的大小写.都好.
但是在生成的YAML中,列名都是小写的,与模型中的情况无关.
似乎没有任何可用的选项generateYamlFromModels(),我可以想象用来调整它.我应该在某个地方设置一些其他属性,可能是在连接级别,还是在经理级别等?可能是个bug吗?
任何想法都非常感激.谢谢,欢呼!
尽管Windows不区分大小写,但它确实保留了文件名中的大小写.在Python中,有没有办法获得带有大小写的文件名,因为它存储在文件系统中?
例如,在Python程序中我有filename ="texas.txt",但是想要知道它实际上存储在文件系统上的"TEXAS.txt",即使这对于各种文件操作来说是无关紧要的.
我如何在SQL查询的select子句中包含嵌套的if语句?我知道使用case时条件然后X else y结束但是你如何以相同的方式为记录集中的每个记录做一个嵌套的.
if x.boy is not null then
x.boy
else if x.girl is not null
then x.girl
else if x.dog is not null
then x.dog
else
x.cat
Run Code Online (Sandbox Code Playgroud)
这是我的尝试:
SELECT top 10
id,
case when x.boy <> NULL then
x.boy
else case when x.girl <> NULL
x.girl
else case when x.dog <> NULL
x.dog
else x.cat
end as Who
from house x
Run Code Online (Sandbox Code Playgroud)
它是否正确?
表 who
wid--name-------father---mother
1----Daisy------David----Liza
2----Jenny------Joe------Judy
3----Meggy------Mike-----Manuela
4----Sarah------Joe------Judy
5----Chelsea----Bill-----Hillary
6----Cindy------David----Liza
7----Kelly------Joe------Judy
Run Code Online (Sandbox Code Playgroud)
表 ages
aid---whoid---age
1-----1--------0
2-----2--------0
3-----3-------14
4-----4-------30
5-----5-------22
6-----6-------17
7-----1-------18
Run Code Online (Sandbox Code Playgroud)
我希望该列表成为结果:
id---name------age
1----Meggy-----14
2----Cindy-----17
3----Daisy-----18 (Selected data that bigger than 0)
4----Chelsea---22
5----Sarah-----30
6----Jenny-----30 (Her age is 0 on ages table and Sarah's age with same father and mother)
7----Kelly-----30 (No data on ages table and Sarah's age with same father and mother)
Run Code Online (Sandbox Code Playgroud)
我试过那个查询:
SELECT
*,
(CASE age
WHEN '0' THEN (
SELECT age
FROM ages a
LEFT JOIN who …Run Code Online (Sandbox Code Playgroud) 我们不能CASE在SQL SELECT语句之外使用条件吗?
例如:
CASE
WHEN old.applies_to = 'admin' THEN _applies_to = 'My Self'
ELSE _applies_to = initcap(old.applies_to)
END
_summary = _summary || '<li>Apply To: ' || _applies_to || '</li>';
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
ERROR: syntax error at or near "_summary"
LINE 86: _summary = _summary || '<li>Apply To: ' || _applies ...
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个使用ASP.NET连接到MySQL数据库的GridView.数据如下所示.
BusinessUnit OrderDate Canceled
UnitA 1/15/2013 N
UnitA 10/1/2013 N
UnitB 10/15/2013 N
UnitB 10/22/2013 N
UnitB 10/22/2013 N
Run Code Online (Sandbox Code Playgroud)
根据上面的记录,我希望结果如下所示
BusinessUnit TodaysOrders ThisMonthsOrders ThisYearsOrders
UnitA 0 1 2
UnitB 2 3 3
Run Code Online (Sandbox Code Playgroud)
我目前的代码如下.它给了我错误(关于DatabaseName.sum的东西不存在.检查函数名称解析和解析'部分......)
Select
SUM (CASE WHEN (OrderDate)=DATE(NOW()) THEN 1 ELSE 0 END) AS TodaysOrders,
SUM (CASE WHEN YEAR(OrderDate) = YEAR(CURDATE()) AND MONTH(OrderDate) = MONTH(CURDATE()) THEN 1 ELSE 0 END) AS ThisMonthsOrders,
SUM (CASE WHEN YEAR(main_order_managers.creation_date) = YEAR(CURDATE()) THEN 1 ELSE 0 END) AS ThisYearsOrders
Run Code Online (Sandbox Code Playgroud)
代码继续
FROM OrderTable WHERE OrderTable.Canceled. …Run Code Online (Sandbox Code Playgroud) case ×10
mysql ×2
postgresql ×2
sql ×2
sql-order-by ×2
t-sql ×2
abstract ×1
class ×1
conditional ×1
doctrine ×1
filenames ×1
orm ×1
perl ×1
php ×1
plpgsql ×1
python ×1
scala ×1
select ×1
sql-server ×1
sum ×1
types ×1
where-clause ×1
windows ×1
yaml ×1