0 0

sql 中两个条件 问题3

我现在有一个表查询, 要用两个字段来都符合条件 来查询结果
SELECT *
FROM orders
WHERE quantity =1 AND customer = 'Tizag'

现在遇到的问题是
现在我们有一组的的数据 要查询 最简单的做法是Java里写一个循环是
for(int i=0;i<listA.size();i++){
SELECT *
FROM orders
WHERE (quantity =listA.get(0)  AND customer = listB.get(0))
}

然后一条一条连接数据库查, 这样速度非常慢
或者写成一条语句
SELECT *
FROM orders
WHERE (quantity =listA.get(0)  AND customer = listB.get(0))
OR (quantity =listA.get(1)  AND customer = listA.get(1))
OR (quantity =listA.get(2)  AND customer = listA.get(2))

这个LIST 可能有100K 条记录 这样就造成了SQL 非常的长。
而一条一条查要100K次

数据库是 oracle

大家有什么其他好的建议没有。谢谢。


SQL 
2012年5月03日 05:57

8个答案 按时间排序 按投票排序

0 0

采纳的答案

1.语法错误;

select * from orders connect by  prior quantity = ?  and prior customer =?start with quantity =1 AND customer = 'Tizag' 

改为:
select * from orders start with quantity =1 AND customer = 'Tizag' connect by  prior quantity = ?  and prior customer =?


2.start with ...connect by  prior...是层次查询语法。
语法形式:
select level column_name ,expression,... from
table_name
[where where_condition]
start with start_condition
connect by prior prior_condition


3.该问题并不是层次查询问题。

4.该问题由于你的list中有100k的记录也就是10万条记录。建议
使用临时表分批查询。将查询结果放在临时表中。
需要注意一下几点:
1.采用PrepareStatement,减少硬解析;
2.减少连接次数,不要在循环中频繁查询;
3.为了提高查询效率,创建一个索引,在查询条件中最好
附带上该索引;
4.可以考虑使用缓存技术,mencache等等。

2012年5月03日 10:25
0 0

循环100K次查肯定奇慢无比,不行的,要么就改成存储过程。或者用上面那句IN两个字段的方式一句sql搞定。

2012年5月04日 00:06
0 0

SELECT *
FROM orders
WHERE (quantity,customer) IN (
.....直接select这2个字段 from 源头表
)

2012年5月04日 00:04
0 0

1.Oracle 是很强大,但在100k数据面前,她也不得不表示很有压力。
2.维护成本已经成为软件生命周期中一个很大的“负担”,系统架构
初期好的设计,良好的开端,会为后期节省很多资源和成本。

2012年5月03日 11:16
0 0

刚试了下 connect by start with 这个写法没有错误
物化视图,一般用于统计,空间什么的根本就没什么,多了一张物理表而已,oracle这么强大的功能被你说成这样了。。。。
解决比较复杂的查询,基本都是秒杀,虽然可能维护的麻烦点,但是效率非常高

2012年5月03日 10:59
0 0

引用
oracle这种查询使用materialized view 也可以很快的解决问题

这个是物化视图会占用磁盘空间,这样做不是很好。对于历史查询,采用物化技术比较好他把查询结果的副本备份起来了下次就可以去“物化视图中查”。

2012年5月03日 10:41
0 0

楼上写的对,我没有测试,随手写的
你说的jdbc写的慢,可能是你查一次创建一次connection,查询不用关闭connection就好了,所有查询完了再关闭连接就可以了
oracle这种查询使用materialized view 也可以很快的解决问题

2012年5月03日 10:33
0 0

用oralce就好办,使用connect by   start with ,下面的问号 不知道你要的是什么字段。。。你自己填上去把

select * from orders connect by  prior quantity = ?  and prior customer =?start with quantity =1 AND customer = 'Tizag' 

2012年5月03日 08:31

相关推荐

    sql对比两个数据库之间的差异

    题目中的SQL语句主要利用了MySQL的信息模式表来比较两个数据库之间的表结构差异。具体来说,该查询通过比较两个不同数据库(假设为'ݿa'和'ݿb')中的列名称,找出在'ݿa'中存在的但在'ݿb'中缺失的列。 ```sql ...

    如何找出SQL表中各个部门工资最高的两个人

    根据题目要求,本文将重点解析如何利用SQL查询技术找出各个部门中工资最高的两个人。这个问题实际上是在探讨如何在数据库中进行分组与排序操作,并从中选取特定条件下的数据记录。接下来,我们将详细介绍几种实现这...

    SQL多条件联合查询.txt

    SQL同一个表不同条件两个SUM两个count查询结果一次查询并显示

    将数据库中的两个字段合并为一个字段

    在SQL中,可以利用`CONCAT()`函数来合并两个或多个字段。这个函数非常简单易用,支持多种数据库系统,包括MySQL、SQL Server等。 ##### 示例代码 下面的SQL语句展示了如何使用`CONCAT()`函数合并两个字段: ```...

    基于jquery js自定义sql条件查询

    2.当条件值是字段串时,中间含有英文单引号“'”时,请用两个单引号“''”表示,如:AA''A ; 3.当条件为“包含”或“不包含”时,条件值不能是日期格式 ; 4.当条件为“包含”或“不包含”时,条件值是字符串类型用...

    OA流程节点操作组条件SQL

    泛微OA流程操作组中条件sql查询,查询流程中所有设置过的条件:(字段名包括:流程名称 节点名称 类型名称 协办人条件 批次);

    自己面试的两个SQL

    标题中的“自己面试的两个SQL”表明这是一些在面试中可能会被问到的SQL查询问题,而描述中提到这是作者在面试后觉得有价值的题目,决定分享出来供他人练习。这些SQL语句主要涉及到对数据的统计分析以及数据表的创建...

    SQL语句中设置多个字符串

    6. **集合操作**:通过JOIN操作,我们可以结合两个或更多表中的字符串条件。例如,假设有一个`strings_table`存储了所有待查找的字符串,可以这样做: ```sql SELECT t1.column_name FROM table_name t1 JOIN ...

    sql问题 感觉挺经典。

    在这个查询中,`WHERE`子句有两个条件:一是`A.Date = '2009-7'`,用于筛选特定日期的数据;二是`B.name = ''`,这可能是在查找那些没有指定名称的记录。 ### CASE语句 `CASE`语句是一种条件表达式,允许根据不同...

    sql两日速成

    ### SQL两日速成知识点详解 #### 一、SQL简介及历史 - **SQL简史**:SQL(Structured Query Language)是一种用于管理关系型数据库的标准语言。它最初由IBM的三位研究人员于1974年提出,后来经过标准化组织如ANSI...

    kettle实现SQL关联查询

    在Kettle的Merge Join Step中,你可以设置匹配条件,只有当这些条件在两个输入流中都满足时,结果才会包含这些记录。这在数据集成中非常有用,比如合并来自不同源头但有共同键值的数据。 LEFT JOIN,又称左连接,...

    解决python 执行sql语句时所传参数含有单引号的问题

    在Python中,单引号(')在SQL语句中需要被转义为两个单引号(''),这样数据库会将其识别为字符串的一部分而不是字符串结束的标记。在示例代码中,`result2.replace("'","\\'")`这行代码就是用来做这个转换的。这里...

    《kettle中实现动态SQL查询》博客文章示例代码

    在传统的SQL语句中,查询条件通常是静态的,但在处理多变的数据需求时,这种静态方式往往不够灵活。动态SQL允许我们在运行时构建和执行SQL语句,使我们能够根据变量或参数来改变查询内容。 问号占位符是SQL中常见的...

    ibatis sql语句对条件中特殊字符% # 处理

    其中,单引号(`'`)被替换为两个单引号(`''`),这是为了防止字符串中的单引号与SQL语句中的单引号发生冲突。而斜杠(`/`)、百分号(`%`)以及下划线(`_`)都被加上了转义字符斜杠(`/`)。 ##### 2.2 使用动态SQL标签 ...

    kettle,sql查询结果做条件循环的作业示例

    一个作业,两个转换,第一个使用【查询分析】的组件接收sql查询结果的字段数据, 第二个转换根据上一个转换的结果为条件执行循环的业务步骤。 提示:请留意第二个转换的属性设置,需要添加命名参数以及勾选复制上...

    sql 语句联合查询交集

    可以用来查询从两个不同的书就表中查询出结果 查询时的拼接语句

    SQL根据表中某列队值选择关联不同的表

    `CASE`语句可以在SQL查询中起到条件判断的作用,可以用来根据某个字段的值返回不同的结果或执行不同的逻辑。本例中我们将使用`CASE`语句结合多表关联来实现需求。 **表结构和数据**: - **表1 (T)** 字段:`id`,...

    sqlservr64.zip

    在描述中,用户提到在安装SQL Server 2005的过程中遇到了问题,需要替换两个特定的文件来解决错误,并且这个解决方案经过验证是有效的。用户通过分享这个ZIP文件,希望对其他遇到同样问题的人有所帮助。 SQL Server...

    在wincc中通过vbs操作SQL

    这里有两个关键的VBS脚本组件: 1. `savedata` 函数:这个函数负责从WinCC的变量中读取数据并将其插入到数据库。首先,定义一个ADODB对象,包括Connection、Command和Recordset。接着,构造数据库连接字符串,然后...

    Mybatis中执行String类型的自己拼写的sql,不执行配置文件中的sql

    在这个例子中,SQL语句被放在了`@Select`注解中,MyBatis会在运行时自动处理这个SQL。 然而,有时我们可能需要更灵活的控制,比如动态构建SQL。这时,我们可以使用`SqlSession`对象的`selectList`, `selectOne`, `...

Global site tag (gtag.js) - Google Analytics