我需要查询两个表中的数据,一个是父表(batches),另一个是子表(details),其中我对父表进行过滤,并希望根据where子句返回父表的所有项,但有选择地将子表的不同方面过滤到父结果集的汇总列中。
话虽如此,以下是我现在可以使用的查询:(很抱歉,由于篇幅太长,我去掉了一些无关紧要的东西,但希望保留子查询)
SELECT
workid,
siteid,
(
SELECT
top 1 description
FROM
worksrcdesc a
WHERE
a.workid = b.workid
AND
下面描述的问题适用于Oracle 11g数据库。我还在MySQL和PostgreSQL上测试了这些语句,没有这个问题中提到的问题。
我想在select语句中使用聚合函数,这需要一些额外的计算才能得到结果。我的主要目标是将整个计算保存在一个语句中,因为结果将在后端软件中逐字显示。
让这个DDL定义一个表T。
create table T(
ID number,
NUM number,
TXT varchar(32)
);
insert into T (ID, NUM, TXT) values (1, 1, 'Text1');
insert into T (ID, N
我希望基于WHERE子句选择记录,并在结果中包含一列,该列说明为什么每个记录都传递WHERE子句的筛选器。
有点像
SELECT name, location, networth, reason
FROM aTable
WHERE location = "France" OR networth > "100"
可能会回来
name|location|networth|reason --reason is the part I need help with
-----------------------------
Joe |France |0
我使用一个类似于发布的查询,以给定的顺序获取对象列表。
我还有两个环境,一个使用MySQL,另一个使用Oracle。在MySQL中,答案中给出的HQL (这里发布以供参考)运行良好,但是当切换到Oracle时,它会转换为无效的相同结果SQL。
select q from Question q where q.id in (:ids) ORDER BY FIELD(id, :ids)
所以我想扩展Oracle10gDialect,并提供转换成符合Oracle标准的SQL:
select q.id
from
Question q
我在SQL SERVER 2008 R2上使用OPENQUERY时遇到性能问题:当我运行:
select
*
from openquery([LINKEDSERVER],'
SELECT
COLUMN1,COLUMN2,COLUMN3...(45 columns at all)
FROM ORACLE_TABLE
WHERE X>Y')
响应时间超过5分钟(是,5分钟)。但是,如果我在Oracle端只有一列运行相同的select:
select
*
from openque
我知道我的问题可能有点奇怪,但我以前没有使用过Oracle,我有这样的语句来选择列中特定数字的计数和输出结果
select count(*)as Step1 from ALLVALUES WHERE NAME LIKE '%VALUE%' AND systime between caltosys(&t1) and caltosys(&t2) AND ROWNUM <= 90000 AND VALUE ='48'
这将输出如下的结果
------
Step1
------
20
------
我需要获取多个条件,并将每个结果放在列中,例如
s
我在Oracle中遇到了一个非常奇怪的查询行为,查询本身是巨大的,并且complex...but基本上每次我运行它时都是一样的。然而,当返回一个较小的结果集时,它似乎执行得更慢。我能给出的最好的例子是,如果我在上面设置这个过滤器,
and mgz_query.IsQueryStatus(10001,lqo.query_id)>0
它返回12,429条记录中的960条,我看到执行时间大约为1.9秒。但是,如果我将过滤器更改为
and mgz_query.IsQueryStatus(10005,lqo.query_id)>0
它返回12,429条记录中的65条,我看到执行时间大约是6
我想写一个查询,如下所示
select
username,
(select state from addresses where addresses.username = users.username) email
from users
这在Oracle中有效(假设内部查询的结果是唯一的)。但是,是否存在与这种编写查询风格相关的性能损失?
我有如下问题:
SELECT COUNT(*) AS AppleSupports
FROM VendorItemPricing
WHERE VendorName = 'Apple'
SELECT COUNT(*) AS HpSupports
FROM VendorItemPricing
WHERE VendorName = 'HP'
上面的查询给我的结果如下:
AppleSupports
63
HpSupports
387
如何使我的查询在一行中获得如下所示的结果?
AppleSupports HpSupports
63
DB版本:Oracle11.1.2.1.0操作系统: OEL5
我试图使用SQL水平打印多个SELECT语句的结果,但无法达到我想要的结果。
多个SQL:
SELECT 'DB Version', version db_version FROM v$instance
UNION ALL
select 'Oracle Client', length(addr)*4 || '-bits' word_length from v$process where ROWNUM =1
UNION ALL
/
结果:
'DBVERSION'
我认为这应该不是很难。我正在编写一段Oracle-SQL代码来从SQL中提取数据:
select ID, Qty from TableOne where ID in ('A', 'B', 'C')
如果in条件中的某些项目有匹配,我希望数据库显示查询结果,如果IN条件中的这些项目没有匹配,则返回默认值。例如,我希望结果为:
+----+-----------+
| ID | Qty |
+----+-----------+
| A | 3 |
| A | 5 |
| B | 4 |
如何根据SQL查询的输出打印我自己的消息。例如:
print "got it" when select * from emp wherempno=10; return atlest one record.
else " not presnet" when the above quesry returns 0 records
我只有一个sql查询,而不是Pl/SQL代码。我使用的是oracle 9 db。
我没有多少使用Oracle SQL的经验,并且一直在尝试完成一些我打算使用的任务
select count(*) from TABLE where date = (select trunc(sysdate -1 ) from dual)
上面的查询给出了sysdate减1的所有记录的结果。
select count(*) from TABLE where date = (select trunc(sysdate -@var ) from dual)
如果查询在星期天运行,则@var =2;如果查询在星期一运行,则@var =3
我需要在我的代码中做一个"WHERE“过滤器,比如:
"select
round ((aust.DTH_DESENFORNAMENTO - aust.dth_enfornamento),7)*1440 as HF
from
qt_qts.res_tubo_austenitizacao aust
WHERE
HF between 'time1' and 'time2' <----------------- THE ERROR
")
但这表明HF在我的代码中不被识别。所以,我试着把全
我有以下查询:
SELECT name,tid FROM table_name WHERE status=1 AND
CASE
WHEN EXISTS (SELECT 1 FROM table_name WHERE name='name1' AND tid='tid1' AND status=1)
THEN name='name1' AND tid='tid1'
ELSE name='name2' AND tid='tid2'
END;
上面的查询适用于postgres和mysql,但在oracle
我已经多次尝试用Oracle12回答以下问题:编写SQL语句来显示客户从未租用过的电影标题?
下面是我需要遵循的模式来回答这个问题:
SELECT titre
FROM film INNER JOIN copie ON film.id_film = copie.id_film
INNER JOIN location ON copie.id_copie = location.id_copie
INNER JOIN client ON client.id_clt = location.id_client
WHERE id_loc IS NULL;
当我提出
如果我有这样的查询
SELECT date_trunc('day', assigndate)e,
count(CASE WHEN a.assigneeid = 65548
AND a.assigneeid IN
(SELECT userid
FROM groupmembers
WHERE groupid = 65553) THEN 1 ELSE NULL END) assigned,
count(CASE WHEN a.assign
我正在使用SQL Server Reporting Services创建报表,该报表从Oracle数据库中选择数据。报告正在工作,但需要很长时间(约75秒)才能生成。我的报告中有以下非常简单的查询:
SELECT
(SELECT COUNT(*)
FROM CALL
WHERE trunc(start_time) >= :Begin_Date
AND trunc(finish_time) <= :End_Date) AS total_calls,
(SELECT COUNT(*)
FROM CALL
WHE
我在运行JPQL查询时遇到了一些问题。在我的域模型中,我有一个City类,它有一个名称和一个对国家对象的引用,而这个对象也有一个名称。我正在尝试运行以下查询:
Query q = em.createQuery("UPDATE City city SET city.name = 'Americaville' WHERE city.country.name = 'America'");
q.executeUpdate();
然而,我得到了这个例外:
java.sql.SQLSyntaxErrorException: ORA-00971: missi
有一段时间,我尝试运行一个类似于以下内容的Oracle sql查询
...
OR
(SELECT COUNT(fieldname)
FROM MYTABLE
WHERE -- SOME LOGIC HERE --
) > 0
OR
(SELECT COUNT...) = 1
AND
(SELECT COUNT)...) = 5
当我只选择括号内的代码并执行它时,它显示了56作为唯一的结果。但是当选择所有表达式时,它在最后一行报告了一个带有>运算符的错误。
对于我来说,Oracle是一个新事物,我无法安装它来测试它,但我认
我希望将一个查询的结果化名,并在另一个查询中使用said别名。作为一个简单的例子,如下所示:
(select a from foo) as fooResults;
select b from bar
where b in fooResults;
显然,这个语法不起作用。有什么方法可以用普通的Oracle SQL实现这一点吗?如果需要PL/SQL,语法是什么?搜索结果似乎都指向列或表别名。
编辑:一个驱动因素是,如果可能的话,我希望能够在以后的几个查询中使用fooResults。
众所周知,Oracle中的IN子句仅限于1000个元素。
有一点我不确定,如果它们是查询的结果,我是否可以超过1000。
例如,如果我们假设:
SELECT TYPEID FROM SECONDTABLE WHERE DATE < YESTERDAY
假设查询返回4300个值,我们可以写:
SELECT
ID
FROM
FIRSTTABLE
WHERE
TYPEID IN (SELECT TYPEID FROM SECONDTABLE WHERE DATE < YESTERDAY)
?因为IN包含一个开始语句(但4300一旦“展开”)。
我有两个查询要检索faultCount和responseCount,如下所示,它工作得很好。
select count(*) as faultCount,
COMP_IDENTIFIER
from CORDYS_NCB_LOG
where AUDIT_CONTEXT='FAULT'
group by COMP_IDENTIFIER
order by responseCount;
select count(*) as responseCount,
COMP_IDENTIFIER
from CORDYS_NCB_LOG
where AUD
我有这样一种情况,我正在构造一个派生的数据透视表,然后我希望能够根据各种条件对其进行子选择(实际上是创建一个数据透视表)。
所以..。在伪模型中,它看起来就像这样。
select
(select sum(score) from derivedTable where username like 'a%') as scoresForANames,
(select sum(score) from derivedTable where username like 'b%') as scoresForBNames
from
( select userna
我有一个类似这样的查询。
select case
when salary<5000
then date1
else date2
end "app"
from employees
order by app desc;
这里,如果员工的工资低于5000,则打印date1列的值;如果员工的薪资大于5000,则打印date2。现在,我想在从这个查询中接收到的日期上应用一个进一步的过滤器,即只显示返回日期在最后7天中的那些记录。我可以按逐个子句顺序使用"app“同义词,但是当我尝试在whe
我需要改变这两个查询的结果。
SELECT SUM(overwritten_ecl+ overwritten_ecl_off) A1
FROM llpa.h_rt_ifrs_provision
WHERE calculation_id = 1624
AND stage = 1
AND id_rip_code = 'HOPISD'
AND actual_urg = '0.5'
还有这张
SELECT SUM(overwritten_ecl+ overwritten_ecl_off) A2
FROM llpa.h_rt_ifrs_provision
WHERE ca
我有以下请求,它们在oracle中运行良好:
SELECT SUM(col1_sum + col2_sum + col3_sum) AS sum_total FROM (
SELECT
COUNT(CASE WHEN (col1 != 0) THEN 1 END) AS col1_sum,
COUNT(CASE WHEN (col2 IS NULL) THEN 1 END) AS col2_sum,
COUNT(CASE WHEN (col3 IS NULL OR col 3 < 0) THEN 1 END) AS col3_sum
SELECT ename
, job
, CASE deptno
WHEN 10
THEN 'ACCOUNTS'
WHEN 20
THEN 'SALES'
ELSE 'UNKNOWN'
END AS department
FROM emp /* !!! */
WHERE department = 'SALES'
这是失败的:
ORA-00904:"%s:无效标识符“
是否有办法克服Ora
为什么这个简单的查询在oracle中运行良好,但在DB2中不运行:
select *
from
sysibm.dual d1
left join sysibm.dual d2 on 1=1 and exists (select 1 from sysibm.dual)
移动子查询相关条件到where子句可能会有所帮助,但这会限制outer join到inner。
冗长的标题和奇怪的问题:我想在oracle SQL中使用with-语句,以便在select as group by子句中重用子查询。此外,我使用case语句来创建更多信息并对结果进行分组。但是,此语句抛出以下错误: ORA-00979:不是GROUP BY表达式。
不起作用的示例查询:我定义了一个包含每个产品系列的销售额总和的查询。我对这个查询进行排序,并选择最畅销的产品系列。因此,我想将这个最畅销的产品系列与其他产品系列的销售总和进行比较(不是逐个比较,而是将所有其他产品系列组合在一起)。我通过以下方式完成此操作:
WITH
top_family AS (
SELECT *
FROM (SE
我有一个相当长的查询,它应该给我一些关于发货的信息,并且它起作用了,但是它的性能非常糟糕。加载大约需要4500毫秒。
SELECT
DATE(paid_at) AS day,
COUNT(*) as order_count,
(
SELECT COUNT(*) FROM line_items
WHERE order_id IN (SELECT id from orders WHERE DATE(paid_at) = day)
) as product_count,
(
SELECT COUNT(*) FROM orde
我有一个If语句块,类似于下面的语句块,它与错误-PLS-00103失败:遇到符号"SELECT“时,期待下列.
Begin
If (select count(*) from Table1) > 0 then
dbms_output.put_line('Test');
end if;
end;
我有类似的案例陈述,效果很好。
select
case
when (select count(*) from Table1) > 0
then 2
else
1
end
from du
我有以下疑问:
SELECT seq, node, edge, cost as cost, agg_cost, geom, sT_AsGeoJson(geom), replace(
(REPLACE(sT_AsGeoJson(geom),
( select ST_AsGeoJson(geom1) from sample(20.983455,52.231909,20.973400,52.169647) a where seq1 in ( select min(seq1) from sample(20.983455,52.231909,20.973400,52.169647 )
我正在使用SQL SERVER 2008。我的查询给了我错误。我想从表[DL_TRN]中获取数据或执行查询。如果该记录不在该表中,那么我想从另一个表[D_Loan]中获取详细信息。我使用了这个查询:
DECLARE @DCount INTEGER;
SET @FCount=(SELECT COUNT(*) FROM [MsumCOOP].[dbo].[DL_TRN] WHERE [M_CODE]=6162 AND ([LOAN_COMP]<>'Y' OR [LOAN_COMP] IS NULL));
SELECT m.[CODE],m.[NAME],d.[OP_
我使用的是Oracle10,但问这个问题的最好方法是举个例子。
select *
from t1, t2
where t1.id = t2.id
and t1.otherID = (select max(otherID)
from t2
where id = THE ID FROM THE OUTER QUERY T1
)
我想你知道我想说什么了吧。我需要在子查询中引用t1,以便将其连接到t2的最大值。
我需要知道如何创建这样的查询。
“来自外部查
我正在尝试编写一个我认为是相当简单的查询,但事实证明比我想象的要难。我想将两个select语句的结果分开:
Select count (*) from tableA where columnA = 'A'
/
Select count (*) from tableA where columnA in ('1','2')
我正在使用Oracle SQL Developer
感谢您的指导
CREATE TABLE case_in_where
(
id integer PRIMARY KEY,
name text NOT NULL
);
INSERT INTO case_in_where (id, name)
VALUES (1, 'foo'), (2, 'bar'), (3, 'baz');
我想过滤数据,但namevalue正在处理order by not where条件如何解决这个问题?你可以在这里试试
SELECT
id, name,
CASE
WHEN
我想根据学生的id或姓名来搜索他们。
是否可以在Oracle数据库中使用动态where:-如果参数:名称为NULL,则where by id = :id -如果参数:id为NULL,则where by name = :name
SELECT ID, NAME, PHONE FROM STUDENTS WHERE .......
谢谢
我使用对我的PL/SQL包进行基本分析。我还使用它获取代码覆盖率统计信息,使用以下查询:
SELECT EXEC.unit_name unitname,ROUND (EXEC.cnt/total.cnt * 100, 1) Code_coverage FROM
(SELECT u.unit_name, COUNT(1) cnt FROM plsql_profiler_data d, plsql_profiler_units u WHERE u.unit_number = d.unit_number GROUP BY u.unit_name) total,
(SELECT u
我有以下Oracle代码:
update registration set
reg_comments=pMessage||decode(reg_reg_int_hld_wait,1,'Was on hold ')||reg_comments
where reg_rid=v_reg_rid;
我只想在reg_comments不包含pMessage的情况下才将它连接到它自己。
我该怎么做?