vis*_*nth 5 mysql sql select where mysql-workbench
请考虑下表:
SELECT id, Bill_Freq, Paid_From, Paid_To, Paid_Dt, rev_code FROM psr_20160708091408;
Run Code Online (Sandbox Code Playgroud)
要求是获取已rev_code填充字符串**SUM**的行.我还注意到,对于rev_code填充为**SUM**的每一行,它Bill_Freq都不会为null或零.
所以我写了两个查询来获取id最低的行
基于where子句中的字符串检查查询:
select
min(id) as head_id,
bill_freq,
Paid_From,
Paid_To,
Paid_Dt
from
`psr_20160708091408` where rev_code = "**SUM**";
Run Code Online (Sandbox Code Playgroud)
基于真实条件的查询:
select
min(id) as head_id,
bill_freq,
Paid_From,
Paid_To,
Paid_Dt
from
`psr_20160708091408` where bill_freq;
Run Code Online (Sandbox Code Playgroud)
我没有看到有人使用第二种类型,想知道它的可靠性和失败的情况.
如果“第二种类型”是指where没有明确条件的子句,那么您有充分的理由看不到它。
SQL 标准以及大多数数据库需要在where. MySQL 允许您使用简写,但它的真正含义是:
where not billing_freq <=> 0
Run Code Online (Sandbox Code Playgroud)
或等价:
where billing_freq <> 0 or billing_freq is null
Run Code Online (Sandbox Code Playgroud)
(这<=>是空安全比较运算符。
您的查询更重要的问题是min(). 我认为您实际上想要这个:
select p.*
from psr_20160708091408 p
where rev_code = '**SUM**'
order by id
limit 1;
Run Code Online (Sandbox Code Playgroud)
另外,您应该使用单引号作为字符串分隔符。这是 ANSI 标准,很少有理由使用双引号。