最近很多小伙伴都在问特定的合并sql中的2列,但其中之一除外和特定的合并sql中的2列,但其中之一除外怎么办这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展CASE和COALESC
最近很多小伙伴都在问特定的合并sql中的2列,但其中之一除外和特定的合并sql中的2列,但其中之一除外怎么办这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展CASE和COALESCE短路评估适用于PL / SQL中的序列,但不适用于SQL中的序列、C语言中的关键字:go是其中之一吗?、DataGridView不能聚焦,但是其中之一可以、line-height的其中之一作用等相关知识,下面开始了哦!
本文目录一览:- 特定的合并sql中的2列,但其中之一除外(特定的合并sql中的2列,但其中之一除外怎么办)
- CASE和COALESCE短路评估适用于PL / SQL中的序列,但不适用于SQL中的序列
- C语言中的关键字:go是其中之一吗?
- DataGridView不能聚焦,但是其中之一可以
- line-height的其中之一作用
特定的合并sql中的2列,但其中之一除外(特定的合并sql中的2列,但其中之一除外怎么办)
我有这样的表:
| user1 | user2 || 1 | 2 || 3 | 1 || 4 | 1 || 1 | 5 || ... | ... |
我想将此列合并为一,但在新合并的列中必须为数字,这与给定的数字不相等。那就是如果我在上表中使用此查询并给出数字1:
SELECT CONCAT(user1, user2) AS user FROM table WHERE user1 = 1 or user2 = 1
我已经退货了:
| user || 12 || 31 || 41 || 15 || .. |
什么时候应该返回此:
| user || 2 || 3 || 4 || 5 || ... |
1是一个示例。怎么做 ?
答案1
小编典典SELECT IF(user1 = 1, user2, user1) AS userFROM tableWHERE user1 = 1 OR user2 = 1
CASE和COALESCE短路评估适用于PL / SQL中的序列,但不适用于SQL中的序列
是否在文档中所描述的短路评价CASE
和COALESCE()
在SQL中使用时适用于序列?这似乎没有发生。
Oracle文档中CASE
指出:
Oracle数据库使用短路评估。对于一个简单的
CASE
表达式…如果先前的compare_expr等于expr,则Oracle永远不会评估compare_expr。对于搜索的CASE表达式,如果以前的条件为true,则数据库…永远不会评估条件。
对于COALESCE()
文档,类似地指出:
Oracle数据库使用短路评估。数据库评估每个expr值并确定它是否为NULL,而不是在确定所有expr值是否为NULL之前先评估所有的expr值。
从SQL调用序列时,情况似乎并非如此。如您所见,没有短路发生,并且顺序增加了。
SQL> create sequence tmp_test_seq start with 1 increment by 1;SQL> select tmp_test_seq.nextval from dual; NEXTVAL---------- 1SQL> select tmp_test_seq.currval from dual; CURRVAL---------- 1SQL> select coalesce(1, tmp_test_seq.nextval) from dual;COALESCE(1,TMP_TEST_SEQ.NEXTVAL)-------------------------------- 1SQL> select tmp_test_seq.currval from dual; CURRVAL---------- 2SQL> select case when 1 = 1 then 1 else tmp_test_seq.nextval end as s from dual; S---------- 1SQL> select tmp_test_seq.currval from dual; CURRVAL---------- 3
SQL小提琴。
但是,从PL / SQL调用时,序列 不 增加:
SQL> create sequence tmp_test_seq start with 1 increment by 1;SQL> declare 2 i number; 3 begin 4 i := tmp_test_seq.nextval; 5 dbms_output.put_line(tmp_test_seq.currval); 6 i := coalesce(1, tmp_test_seq.nextval); 7 dbms_output.put_line(i); 8 dbms_output.put_line(tmp_test_seq.currval); 9 i := case when 1 = 1 then 1 else tmp_test_seq.nextval end; 10 dbms_output.put_line(i); 11 dbms_output.put_line(tmp_test_seq.currval); 12 end; 13 /11111SQL> select tmp_test_seq.nextval from dual; NEXTVAL---------- 2
从PL / SQL调用SQL中的序列与使用SQL产生相同的结果:
SQL> create sequence tmp_test_seq start with 1 increment by 1;SQL> declare 2 i number; 3 begin 4 select tmp_test_seq.nextval into i from dual; 5 dbms_output.put_line(tmp_test_seq.currval); 6 select coalesce(1, tmp_test_seq.nextval) into i from dual; 7 dbms_output.put_line(i); 8 dbms_output.put_line(tmp_test_seq.currval); 9 select case when 1 = 1 then 1 else tmp_test_seq.nextval end into i 10 from dual; 11 dbms_output.put_line(i); 12 dbms_output.put_line(tmp_test_seq.currval); 13 end; 14 /11213
文档中似乎没有关于此的任何内容。管理员管理序列导向,上序列psuedocolumns
SQL语言参考,关于和CURRVAL
NEXTVAL的PL /
SQL语言参考或数据库概念概述序列。
确实的短路评价CASE
和COALESCE()
在SQL中使用时发生的序列?有文件记录吗?
如果感兴趣的话,我们就在11.2.0.3.5上。
答案1
小编典典关于短路评估为何不适用于序列的原因的解释如下。什么是序列?抛开内部因素,它是序列定义(记录在seq$
数据字典表中)和一些内部SGA组件的组合,它不是一个函数,可以考虑使用,尽管文档并未直接将其声明为行源(但执行计划中确实如此)。而且,每次在查询的选择列表中直接引用序列时,优化器在搜索最佳执行计划时都必须对其进行评估。在形成最佳执行计划的过程中,如果nextval
引用伪列,则序列会递增:
SQL> create sequence seq1;Sequence created
这是我们的顺序:
SQL> select o.obj# 2 , o.name 3 , s.increment$ 4 , s.minvalue 5 , s.maxvalue 6 , s.cache 7 from sys.seq$ s 8 join sys.obj$ o 9 on (o.obj# = s.obj#) 10 where o.name = ''SEQ1'' 11 ; OBJ# NAME INCREMENT$ MINVALUE MAXVALUE CACHE---------- ------- ---------- ---------- ---------- ---------- 94442 SEQ1 1 1 1E28 20
让我们跟踪下面的查询,并查看其执行计划
SQL> ALTER SESSION SET EVENTS ''10046 trace name context forever, level 4'';Session alteredSQL> select case 2 when 1 = 1 then 1 3 when 2 = 1 then seq1.nextval 4 end as res 5 from dual; RES---------- 1/* sequence got incremented by 1 */SQL> select seq1.currval from dual; CURRVAL---------- 3
跟踪文件信息:
STAT#1016171528 id = 1 cnt = 1 pid = 0 pos = 1 obj = 94442 op =’SEQUENCE
SEQ1 …
STAT#1016171528 id = 2 cnt = 1 pid = 1 pos = 1 obj = 1 obj = 0 op =’FAST
DUAL 。 ..
CLOSE#1016171528:c = 0,e = 12,dep = 0,type = 0,tim = 12896600071500 /
关闭光标 /
执行计划将向我们展示基本相同的内容:
SQL> explain plan for select case 2 when 1 = 1 then 1 3 else seq1.nextval 4 end 5 from dual 6 /ExplainedExecuted in 0 secondsSQL> select * from table(dbms_xplan.display());PLAN_TABLE_OUTPUT---------------------------------------------------------------Plan hash value: 51561390-----------------------------------------------------------------| Id | Operation | Name | Rows | Cost (%CPU)| Time |-----------------------------------------------------------------| 0 | SELECT STATEMENT | | 1 | 2 (0)| 00:00:01 || 1 | SEQUENCE | SEQ1 | | | || 2 | FAST DUAL | | 1 | 2 (0)| 00:00:01 |-----------------------------------------------------------------9 rows selectedExecuted in 0.172 seconds
在评估方面,直接在查询中引用序列,与包含相关子查询大致相同。 该关联的子查询将始终由优化器评估:
SQL> explain plan for select case 2 when 1 = 1 then 1 3 when 2 = 1 then (select 1 4 from dual) 5 end as res 6 from dual;ExplainedExecuted in 0 secondsSQL> select * from table(dbms_xplan.display());PLAN_TABLE_OUTPUT-----------------------------------------------------------------Plan hash value: 1317351201-----------------------------------------------------------------| Id | Operation | Name | Rows | Cost (%CPU)| Time |-----------------------------------------------------------------| 0 | SELECT STATEMENT | | 1 | 4 (0)| 00:00:01 || 1 | FAST DUAL | | 1 | 2 (0)| 00:00:01 || 2 | FAST DUAL | | 1 | 2 (0)| 00:00:01 |-----------------------------------------------------------------9 rows selectedExecuted in 0.063 seconds
我们可以看到该dual
表已经两次包含在执行计划中。
急于做出与子查询的类比。当然,区别多于相似。序列是绝对不同的机制。但是,优化器将序列视为行源,并且只要nextval
在select
顶级查询列表中看不到直接引用序列的伪列,它就不会评估该序列,否则无论是否使用短路评估逻辑,该序列都将递增。显然,PL
/ SQL引擎(从Oracle 11g r1开始)具有访问序列值的不同方法。应该注意的是,在以前的11gR1版本的RDBMS中,我们应该编写查询以引用PL
/ SQL块中的序列,PL / SQL引擎将其直接发送到SQL引擎。
关于“ 为什么序列在优化程序生成执行计划期间会增加 的问题”的答案在于序列的内部实现。
C语言中的关键字:go是其中之一吗?
C语言中的关键字:go是其中之一吗?
在学习C语言的过程中,我们不可避免地会碰到各种关键字,这些关键字在程序设计中扮演着重要的角色。而对于初学者来说,有时候会产生一些疑惑,比如有人可能会问,C语言中是否有关键字“go”呢?接下来,让我们一起来探究一下这个问题。
首先,我们需要明确一点,C语言是一种非常经典的编程语言,它的关键字是早已确定的,不会轻易改变。在C语言的标准中,并没有一个名为“go”的关键字。因此,我们不能在C语言程序中使用“go”作为关键字来定义标识符、变量或函数等。
为了更清晰地说明这一点,让我们通过具体的代码示例来展示,在C语言中使用关键字“go”会引发
立即学习“C语言免费学习笔记(深入)”;
#include <stdio.h> int main() { int go = 10; printf("The value of go is: %d", go); return 0; }
当我们尝试编译上述代码时,编译器将会报错,提示“error: expected identifier or ‘(’ before ‘=’ token”。这是因为在C语言中,“go”被视为一个非法的标识符,无法作为变量名使用。
在编程中,关键字是具有特殊含义的保留字,它们通常用于声明变量类型、控制程序流程等。C语言中已经定义了一系列固定的关键字,包括“int”、 “if”、 “while”等,这些关键字是编译器识别并处理的重要部分,而“go”并不在其中。
尽管C语言中没有关键字“go”,但在其他编程语言中,比如Go语言(也称为Golang),“go”是一个重要的关键字,用于启动一个新的goroutine,实现并发编程。因此,对于想要使用“go”关键字的开发者,可以考虑学习和使用Go语言。
总的来说,C语言中并没有关键字“go”,在编写C语言程序时需要遵守C语言的规范,不得随意使用非法的标识符。希望通过本文的解释和代码示例能帮助读者更好地理解C语言中的关键字,避免出现不必要的错误。
(注:以上代码仅为示例,编译或运行结果可能因环境和设置而有所不同。)
以上就是C语言中的关键字:go是其中之一吗?的详细内容,更多请关注php中文网其它相关文章!
DataGridView不能聚焦,但是其中之一可以
如何解决DataGridView不能聚焦,但是其中之一可以?
| 我遇到了与Windows窗体中的DataGridViews有关的最奇怪的错误。 我有一个TabControl,应该在每个标签页中包含一个停靠的DataGridView。我认为将网格集中在更改选项卡页面上会很方便,以便用户只需将鼠标悬停在网格上并在更改页面时开始滚动即可。因此,我只是在事件处理程序中放入“ 0”来更改选项卡页。 但是,确实发生了一些奇怪的事情。在我的测试应用程序中,我有三个标签页。如果我在启动应用程序后立即尝试滚动网格,则无法正常工作;我必须先单击网格。我期望如此。但是,如果更改选项卡页,除非单击第一个网格,否则我无法滚动其他网格! 因此,如果我将页面切换到第二页,然后又切换回第一页,则无需单击即可自动滚动该网格,但是如果我切换到第三页,则必须单击以使网格聚焦。 我看了一下网格的CanFocus
属性,似乎只有第一个网格将其设置为True。它们都是以编程方式创建的,并且都以相同的方式创建。我不明白他们为什么会有所不同。
有任何想法吗?
解决方法
grids[tabs.TabIndex].Focus()
而不是grids[tabs.SelectedIndex].Focus()
。
那好吧。
line-height的其中之一作用
html结构:
<div>
<p>月会员</p>
<p>¥XX</p>
<p>1个月</p>
</div>
css结构:
.money-options {
display: inline-block;
width: 106px;
height: 108px;
/*line-height: 1;*/ /*没有line-height的时候*/
margin-right: 10px;
border: 1px solid #D7D7D7;
border-radius: 8px;
text-align: center;
}
.money-options .txt {
padding: 18.5px 0 0 0;
color: #656565;
font-size: 13px;
}
.money-options .money {
padding: 15.5px 0 18px 0;
color: #F7B529;
font-size: 20px;
}
.money-options .times {
margin: 0 0 12.5px 0;
color: #999999;
font-size: 11px;
}
解释:
如果在一个div设置的高度而没有设置line-height,那么这个div里面的内容就会撑出去,加上line-height:1后,那么里面的padding就不会乱撑开,就会放在div里面了
今天关于特定的合并sql中的2列,但其中之一除外和特定的合并sql中的2列,但其中之一除外怎么办的讲解已经结束,谢谢您的阅读,如果想了解更多关于CASE和COALESCE短路评估适用于PL / SQL中的序列,但不适用于SQL中的序列、C语言中的关键字:go是其中之一吗?、DataGridView不能聚焦,但是其中之一可以、line-height的其中之一作用的相关知识,请在本站搜索。
本文标签: