本文将介绍将SELECT中的值与ORACLE中的分隔符连接起来的详细情况,特别是关于oracleselect*和select字段的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这
本文将介绍将 SELECT 中的值与 ORACLE 中的分隔符连接起来的详细情况,特别是关于oracle select *和select 字段的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于Apex Oracle calendar When Select list value is null show all and when Select value is not null show filtered、how to show new select input only when select specific option and when select another options don't show by jquery?拉拉维尔、Insert Into select 与 Select Into 哪个更快?、MyBatis~ 关联的嵌套 Select 查询和关联的嵌套结果映射 (association 元素的使用)、集合的嵌套 Select 查询和集合的嵌套结果映射 (collection 的使用)的知识。
本文目录一览:- 将 SELECT 中的值与 ORACLE 中的分隔符连接起来(oracle select *和select 字段)
- Apex Oracle calendar When Select list value is null show all and when Select value is not null show filtered
- how to show new select input only when select specific option and when select another options don't show by jquery?拉拉维尔
- Insert Into select 与 Select Into 哪个更快?
- MyBatis~ 关联的嵌套 Select 查询和关联的嵌套结果映射 (association 元素的使用)、集合的嵌套 Select 查询和集合的嵌套结果映射 (collection 的使用)
将 SELECT 中的值与 ORACLE 中的分隔符连接起来(oracle select *和select 字段)
如何解决将 SELECT 中的值与 ORACLE 中的分隔符连接起来
我有表 products
,我想创建字符串:
http://localhost/app/Feeds/send?type=myType&ids=1,2,3,...,100
http://localhost/app/Feeds/send?type=myType&ids=101,102,103,200
我创建了 sql 查询:
select concat(''http://localhost/app/Feeds/send?type=myType'' || CHR(38) || ''ids='',product_id) from products where isin like ''AC%'' and status in
(''Active'',''Created'',''Live'')
and
((date>to_date(''07.05.2021'',''dd.MM.yyyy'') or date is null));
它似乎几乎是我需要的,但结果是:
http://localhost/app/Feeds/send?type=myType&ids=1
http://localhost/app/Feeds/send?type=myType&ids=2
http://localhost/app/Feeds/send?type=myType&ids=3
如何更改此查询以返回带有分隔符 ids
的 100 ,
?
解决方法
您可以在 Oracle 中使用 LISTAGG 函数。
select ''http://localhost/app/feeds/send?type=myType'' || CHR(38) || ''ids='' ||
LISTAGG(product_id,'','') WITHIN GROUP (ORDER BY product_id)
from products where isin like ''AC%'' and status in
(''Active'',''Created'',''Live'')
and
((pdate>to_date(''07.05.2021'',''dd.MM.yyyy'') or pdate is null));
DB Fiddle
,去掉 Concat 函数,你不需要它。
使用任何字段将 ID 1 到 100 从 101 到 200 添加一个 Group By 子句。
然后让您的查询使用 ListAgg() 聚合函数如 ListAgg(id,'') 返回一列。第一个参数是您要聚合的字段 (id),第二个参数是要在两条记录之间使用的分隔符。
Apex Oracle calendar When Select list value is null show all and when Select value is not null show filtered
如何解决Apex Oracle calendar When Select list value is null show all and when Select value is not null show filtered?
我想要实现的是:
- when the select value is null -> all the appointments show up
- 设置选择值时 -> 仅指定特定医生的预约。
查询:
SELECT a.ward_id,a.doc_id,a.id_patient,a.dt_Sched,a.dt_Sched_end,a.sched_time,to_char(a.sched_duration,''0.0'') sched_duration,a.sched_id,a.hosp_ward,c.surname||'' ''||c.name || '' - time :'' ||a.sched_time display,d.description
FROM t_schedule a,T_doctors b,t_patient c,t_Ward d
WHERE a.doc_id = b.doc_id
and c.id_patient = a.id_patient
/* and b.doc_id = :PselectList*/ > Select list for which doctor
and d.ward_id= a.ward_id
没有:''和 b.doc_id = :PselectList''
- 显示日历中的所有约会
with : ''and b.doc_id = :PselectList''
- 如果选择值设置为空 --> 日历中没有约会
- 如果选择值设置为非空医生 --> 按所选值在日历中显示过滤约会
解决方法
已通过 nvl 解决:
WHERE a.doc_id = b.doc_id
and c.id_patient = a.id_patient
and b.doc_id = nvl(:PselectList,b.doc_id)
and d.ward_id= a.ward_id
,
如果我理解正确的话,应该是
from t_schedule a join t_doctors b on a.doc_id = b.doc_id
join t_patient c on c.id_patient = a.id_patient
join t_ward d on d.ward_id = a.ward_id
where (b.doc_id = :P3008_SELECTLIST or :P3008_SELECTLIST is null)
(顺便说一句,你真的使用 MS SQL Server 作为数据库吗?它不是 Oracle 吗?如果是,请修复标签。)
how to show new select input only when select specific option and when select another options don't show by jquery?拉拉维尔
如何解决how to show new select input only when select specific option and when select another options don''t show by jquery?拉拉维尔
i''m trying to show new select input contains (states) options,when user select specific option a (USA) country,and when select another country non (USA) don''t show the states select options i want in this案件仍然隐藏。
路线
Route::get(''/ajax-form'',[AjaxController::class,''index''])->name(''ajax.index'');
Route::get(''/getState/{id}'',''getState''])->name(''ajax.state'');
控制器
class AjaxController extends Controller
{
public function index()
{
$countries[''data''] = Country::orderby(''name'')
->select(''id'',''name'')
->get();
return view(''ajax.index'',compact(''countries''));
}
public function getState($countryId = 0)
{
$states[''data''] = State::orderby(''name'')
->select(''id'',''name'')
->where(''country_id'',$countryId)
->get();
return response()->json($states);
}
带脚本的刀片形式:
@extends(''layouts.app'')
@section(''form'')
<form>
<div>
<div>
<label for="inputCountry">Country</label>
<selectid="inputCountry">
<option selected>Choose...</option>
@if ($countries[''data''] && $countries[''data'']->count() > 0)
@foreach ($countries[''data''] as $country)
<option value="{{ $country->id }}">{{ $country->name }}</option>
@endforeach
@endif
</select>
</div>
</div>
<div id="stateShow">
<div>
<label for="inputState">State</label>
<select id="inputState">
<option value=''0'' selected>Choose...</option>
</select>
</div>
</div>
<button type="submit">Save</button>
</form>
@stop
@section(''script'')
<script type="text/javascript">
$(document).ready(function () {
$(''#inputCountry'').change(function() {
var id = $(this).val();
// Empty the States dropdown without first
$(''#stateShow'').show();
$(''#inputState'').find(''option'').not('':first'').remove();
// ajax request
$.ajax({
url: ''getState/'' + id,type:''get'',dataType: ''json'',success: function(response) {
var len = 0;
if(response[''data''] != null) {
len = response[''data''].length;
}
if(len > 0) {
// Read data in the state option that related with country
for(var i = 0; i < len; i++) {
var id = response[''data''][i].id;
var name = response[''data''][i].name;
var option = "<option value=''" + id + "''>" + name + "</option>";
$(''#inputState'').append(option);
}
}
}
});
});
});
</script>
@stop
上面的脚本做,当我选择任何国家时,隐藏的(州)选择被显示,我希望它只在我选择(美国)而不是仍然隐藏的时候显示
你能帮我吗
解决方法
在您的 inputCountry
选择框中,我假设 {{ $country->name }}
是国家/地区名称,因此您可以使用 $(this).find("option:selected").text()
获取此值,然后将其与 USA
进行比较(如果它们是)等于显示你的 div 否则隐藏它。
演示代码:
$(''#inputCountry'').change(function() {
var id = $(this).val();
var text = $(this).find("option:selected").text().trim() //get text
if (text == "USA") {
$(''#stateShow'').show(); //show
$(''#inputState'').find(''option'').not('':first'').remove();
//your ajax call put here ....
} else {
$(''#stateShow'').hide(); //hide
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<form>
<div>
<div>
<label for="inputCountry">Country</label>
<selectid="inputCountry">
<option selected>Choose...</option>
<option value="{{ $country->id }}">Abc</option>
<option value="{{ $country->id }}">USA</option>
</select>
</div>
</div>
<div id="stateShow">
<div>
<label for="inputState">State</label>
<select id="inputState">
<option value=''0'' selected>Choose...</option>
</select>
</div>
</div>
<button type="submit">Save</button>
</form>
Insert Into select 与 Select Into 哪个更快?
在平常数据库操作的时候,我们有时候会遇到表之间数据复制的情况,可能会用到INSERT INTO SELECT 或者 SELECT INTO ;
那么二者语法上有什么区别?性能上又如何呢?
围绕着这两个问题,今天就来总结对比下:
一:语法区别
1: INSERT INTO SELECT 的语法
INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。目标表中任何已存在的行都不会受影响。
如果两个表的结构一致,字段类型一致:
INSERT INTO table2
SELECT * FROM table1;
如果两个表结构不一致,只有某几列一致:
INSERT INTO table2 (column_name)
SELECT column_name FROM table1;
2:SELECT INTO 的语法
SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表中。
如果想要复制所有的列:
SELECT *
INTO newtable
FROM table1;
如果想要复制部分的列:
SELECT column_name
INTO newtable
FROM table1;
提示:新表将会使用 SELECT 语句中定义的列名称和类型进行创建。如果想要修改字段的名称,可以使用 AS 子句来应用新名称。
二:性能区别
----创建一个基础数据库
CREATE TABLE TestDataTable(
id int not null,
userName varchar(20),
remark varchar(100)
)
----填充100W测试数据
DECLARE @id INT,@userName NVARCHAR(50),@remark NVARCHAR(50);
DECLARE @i INT;
SET @id=0;
SET @userName ='''';
SET @remark='''';
SET @i=0;
WHILE @i<1000000
BEGIN
SET @id=@i;
IF(@i%2=0)
begin
set @userName=''二狗子'';
set @remark=''SELECT INTO 最快!''
end
else
begin
set @userName=''李四'';
set @remark=''快你妹,INSERT INTO 最快''
end
INSERT INTO TestDataTable(id,username,remark)
VALUES (@id,@username,@remark )
SET @i=@i+1
END
--查询填充后的数据
SELECT * FROM TestDataTable
--删除表结构以及数据【慎用】
DROP Table TestDataTable
耗时1分钟58秒,数据填充好了,真是不给力,竟然用了快2分钟;
好了,在去创建一个目标数据库;
--创建一个目标数据库,把100W数据复制到这个里面取
CREATE TABLE TargetDB(
id int not null,
userName varchar(20),
remark varchar(100)
)
测试1:INSERT INTO SELECT
SET STATISTICS TIME ON
INSERT INTO TargetDB
SELECT *
FROM TestDataTable
GO
SET STATISTICS TIME OFF
测试2:SELECT INTO
SET STATISTICS TIME ON
SELECT *
INTO TargetDB
FROM TestDataTable
GO
SET STATISTICS TIME OFF
三:结论
经过上面的对比,可以看出SELECT INTO 的性能要比INSERT INTO 快出不少;
虽然SELECT INTO 数据的导入速度有很大优势,但是也有不好的地方,就是此语句只能在目标表没有创建的情况下使用,如果目标表结构已经存在,就会提示数据库中已存在名为 ''TargetDB'' 的对象(如下图),此时就只能用INSERT INTO SELECT 方式去操作了。
MyBatis~ 关联的嵌套 Select 查询和关联的嵌套结果映射 (association 元素的使用)、集合的嵌套 Select 查询和集合的嵌套结果映射 (collection 的使用)
文章目录
- 解决一对多数据问题
-
- 关联的嵌套 Select 查询
- 关联的嵌套结果映射
- 解决一对多问题
-
- 集合的嵌套 Select 查询
- 集合的嵌套结果映射
- 小结
解决一对多数据问题
- 在一对多的数据表结构中,比如一个老师教育着很多学生,对于学生而言,这就是一个一对多的问题
- 这个主要解决的就是如果我们的 POJO 对象的属性中,有一个是引用类型,不是基本类型或者 String, 那么简单的 sql 语句肯定是解决不了的
- 学生类型
public class Student {
private int id;
private String name;
private Teacher teacher;
}
- 老师类型
public class Teacher {
private int id;
private String name;
}
- 比如我们现在有一个需求,要查找数据库中所有的学生对象,该如何做?
关联的嵌套 Select 查询
<select id="selectStudent" resultMap="studentTeacher">
select * from student;
</select>
<resultMap id="studentTeacher" type="student">
<association property="teacher" javaType="teacher" column="tid" select="selectOneTeacher"/>
</resultMap>
<select id="selectOneTeacher" resultType="teacher">
select * from teacher where id=#{
tid};
</select>
- 带你解读一下上面的代码,首先 id 对应的是我们 dao 层接口的方法,返回值类型我们初始设置成 resultmap, 首先查到的是数据库学生表的所有信息
- 然后到 resultMap 标签里,这里的 id 要对应上述我们设置的 resultMap 的名子,这个这个返回类型就是真实的返回类型,所以是 student, 其中 student 的 id 和 name 已经自动映射好了,不需要我们再次建立映射关系,最重要的就是 teacher 对象的映射,我们使用 association 标签,property 映射到 student 类型的 teacher 引用名,Javatype 表示返回的是一个 teacher 类型,column 表示所查到的学生信息中的 tid 要去这个老师对象建立连接,select 表示调用下面的 select 语句
- 在最下面的 select 语句中,返回类型是 teacher 类型与上面进行对应,在 sql 语句中通过上面的 column 设定的列的值进行对应建立连接
- 最后就是返回 student 这个对象
关联的嵌套结果映射
<select id="selectStudent2" resultMap="studentTeacher2">
select s.id sid, s.name sname, t.name tname from student s, teacher t where s.tid=t.id;
</select>
<resultMap id="studentTeacher2" type="student">
<result column="sid" property="id"/>
<result column="sname" property="name"/>
<association property="teacher" javaType="teacher">
<result column="tname" property="name"/>
</association>
</resultMap>
- 使用这个代码易懂,但是 sql 语句会变得复杂
- 一开始我们便使用很长的 sql 语句建立老师和学生的连接将所有信息查询出来
- 所以在 resultmap 中我们只需要将这些信息进行结果映射即可,但是要注意引用类型的结果映射还得在 association 元素内使用,还需指定返回的类型
- 注意我没有设置老师 id 的这个属性的映射关系,所以查到显示的肯定是这个数据类型的默认值
解决一对多问题
- 还是最开始的那个例子,一个老师教育很多学生,对于老师而言这就是一对多的关系,但是在这里我想复杂一下就是一个班级既有老师,又有学生,也就是既有引用类型,又有集合类型,这种该如何查询
- 好,我现在有一个需求,我指定老师的 id 要得到这个教室的所有信息,包括老师的信息和所有学生的信息
- 教室类型
public class ClassRoom {
private Teacher teacher;
private List<Student> students;
}
集合的嵌套 Select 查询
<select id="getClassRoom" parameterType="_int" resultMap="classRoomMap">
select * from teacher where id=#{
tid};
</select>
<resultMap id="classRoomMap" type="classRoom">
<association property="teacher" javaType="teacher">
<result column="id" property="id"/>
<result column="name" property="name"/>
</association>
<collection property="students" javaType="ArrayList" ofType="student" column="id" select="students"/>
</resultMap>
<select id="students" resultType="student">
select id, name from student where tid=#{
id};
</select>
- 首先最开始 id 对象方法名是 getClassRoom, 通过老师的 id 查找,所以会有一个参数 parameterType 是 int 型的,初步返回类型是 resultmap, 在初步的 sql 语句中,我通过老师的 id 找到这个老师的所有信息
- 在 resultMap 的对应名称 classRoomMap 里,我指定返回类型当然是一个 classroom 类型,接下来就是使用 association 元素对老师这个引用进行属性建立映射关系
- 接下来使用 collection 这个元素对学生这个集合进行构造,首先明确使用 collection 这个元素,你首先是要与 classroom 的属性名建立映射练习,然后必须指定 javatype 和 oftype, javatype 是 java 中的什么集合类型,oftype 是指定这个集合类型中的泛型参数的什么类型的,这个很重要,然后 column 指定通过什么数据与后面的 select 建立联系
- 在最后的 select 中,我们通过上述 column 传来的 teacher 的 id 与所有学生的替代建立联系,查到对应要求的信息,返回 student 类型,值此再返回 classRoom 这个类型的查询结果
集合的嵌套结果映射
- 这里需要改一个东西,就是如果要满足我们的需求,使用上面的 classroom 类型如果使用集合的嵌套结果映射在 SQL 层面是实现不了的,所以得把 classroom 的数据类型改一下
- 新的教室类型
public class ClassRoom {
private int tid;
private String tname;
private List<Student> students;
}
- ok
<select id="getClassRoom2" parameterType="_int" resultMap="classRoomMap2">
select s.id sid, s.name sname, t.id tid, t.name tname from student s, teacher t where s.tid=t.id and t.id=#{
tid};
</select>
<resultMap id="classRoomMap2" type="classRoom">
<result column="tid" property="tid"/>
<result column="tname" property="tname"/>
<collection property="students" javaType="ArrayList" ofType="student">
<result column="sid" property="id"/>
<result column="sname" property="name"/>
</collection>
</resultMap>
- 只要使用的是结果集的映射,就是一开始就将所有信息都查出来,然后在一个 resultMap 中进行属性名与数据库表中列的字段名建立连接
- 但是还是要注意这里的 sql 语句是比上面的复杂的,而且要留意只要使用 collection 元素,就必须设置其中的 Javatype 和 oftype, 这点很重要
小结
- 关联 association, 用于属性中有对象时使用,用于一对多的环境
- 集合 collection, 用于属性中有集合类型的时候使用,用于多对一的环境
- javatype, 用来指定 java 中指定实体属性中的类型,就好比这个指定的是 List 类型
- oftype, 用来指定映射到 java 指定实体属性集合中泛型的具体类型,这个指定的就是 List 中 Studente 类型
- 如果需要使用引用类型,association, 只需注明属性名称,注明 javatype, 然后在里面进行设置值即可
- 如果是集合类型,使用 collection, 注明属性名称,注明 javatype 类型,和集合类型里面的泛型类型 oftype, 然后在里面 result 值即可.
注意点:
- 保证 sql 的可读性,尽量保证通俗易懂
- 注意多对一和一对多中属性名和字段名的匹配问题,多用于日志
关于将 SELECT 中的值与 ORACLE 中的分隔符连接起来和oracle select *和select 字段的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Apex Oracle calendar When Select list value is null show all and when Select value is not null show filtered、how to show new select input only when select specific option and when select another options don't show by jquery?拉拉维尔、Insert Into select 与 Select Into 哪个更快?、MyBatis~ 关联的嵌套 Select 查询和关联的嵌套结果映射 (association 元素的使用)、集合的嵌套 Select 查询和集合的嵌套结果映射 (collection 的使用)等相关知识的信息别忘了在本站进行查找喔。
本文标签: