下面的脚本在shell中。test.sh
#! /bin/bash
connect_stat=$(db2 -x "connect to $DB_NAME USER $DB_USER using $DB_PASSWORD" )
db2 "SET SCHEMA=SCHEMA1"
while read line;
do
a=$(db2 -x "SELECT C.id FROM table C WHERE C.col1 IN ('$line)') with ur")
echo $a
done<inputs.txt
当我运行
我会请求帮助了解Oracle、DB2、Sybase的所有关系数据库管理系统在子查询中支持公共表表达式(CTE)。我知道PostgreSQL支持,而MS SQL Server不支持。
SELECT a.*, b.*
FROM (WHERE aa as (
<<select_query>),
SELECT *
FROM aa
WHERE <<criteria>>
) as a
LEFT JOIN (
WITH bb as (
我正在从PostgreSql迁移到DB2,我有一个来自postgresql的查询。 select (
select count(distinct gs_receiver_id)
from AMERISOURCEPROTOTYPE.transactions
WHERE first_touch_day = '2020-02-19'
AND transaction_type = '850'
AND company = 'Customer'
AND direction = 'O'
) as
我写了这个SQL查询:
SELECT *
FROM
dbo.RDB_LOG_ITEM,
(
SELECT '000' + CAST(operatore as varchar) + cast(scontrino as varchar) search
FROM
(
SELECT
N0_XACT_NO scontrino,
N0_OPERATOR_NO operatore
FROM
我在db2查询中有一个问题
我试着运行这个查询
SELECT t.* ,
CASE WHEN column in (SELECT data FROM otherTable WHERE conditions...)
then 5
else 0
end as 'My new data'
FROM table t
WHERE conditions....
但要犯错误
[Error Code: -115, SQL State: 42601] [SQL0115] Comparison operator IN not valid.
当我将子查询改为where语句
如果我有疑问,就说:
SELECT *
FROM ( SELECT fields
FROM tables
WHERE condition
)
AS TEMP_TABLE
上述查询的结果是否保存在一个名为TEMP_TABLE的临时表中,以便我以后可以对其执行另一个查询?当使用DB2时,下面的查询是否能成功执行?
SELECT fields
FROM TEMP_TABLE
WHERE condition
我认为mysql查询中的mysql 5.6中的变量有问题:
SELECT DISTINCT TRIM(TRAILING '.' FROM merge_s.rdata) AS `content`,
'120' AS ttl,
`merge_s`.`pri` AS `prio`,
(SELECT type FROM types WHERE type = @type:='MX') AS `type`,
(SELECT id FROM soa WHERE CO
我对DB2不熟悉,在甲骨文中我们可以做以下工作
select * from
(WITH A AS (SELECT 'test' FROM DUAL)
SELECT *
FROM A )
在DB2中,我有一个类似于此的要求,但它不允许我这样做。我的要求和上面不完全一样,但我简化了。
还有另一个问题,我试图对使用下面的查询获得的结果执行XML输出。但问题是,当我调用XMLFOREST函数时,它限制我只有一个列作为输入(在下面的示例中,A*B是不允许的)。
SELECT XMLELEMENT (
NAME "DATA",
XMLAGG
我想使用strace来调试我在db2中的一种奇怪行为。我有一个在myFoo()中实现的C函数,由于某种原因没有被调用(一些代码访问路径不存在或没有授权,参见)。我的Sql函数在/usr/local/lib/libmyfoo中的共享库中调用函数/usr/local/lib/libmyfoo(所以在db2术语/usr/local/lib/libmyfoo!Foo中)。
如果我将strace直接与db2和查询一起使用,则会出现一个错误:
A database connection does not exist
因此,我创建了一个脚本调用debug.sh,如下所示。这样做的目的是让一个具有db2
我正在运行一个SQL查询,并试图将结果分解为块。
select task_id, owner_cnum
from (select row_number() over(order by owner_cnum, task_id)
as this_row, wdpt.vtasks.*
from wdpt.vtasks)
where this_row between 1 and 5;
该SQL在Windows和Linux上使用DB2 10.5,但在z/OS上的DB2 10.1上失败,错误消息如下:
当我在连接到数据库的Da
我正在尝试对一个db2数据库运行下面的查询。
SELECT
columnA,
(CASE
WHEN columnA NOT IN (SELECT DISTINCT columnC FROM table_2) THEN 1 ELSE 0
END) AS columnB
FROM
table_1;
这将产生错误SQL0115 - Comparison operator NOT not valid。如果我将subselect替换为我知道它会产生的值,则不会出现错误。
SELECT
columnA,
(CASE
我有一个项目,可以将一些使用DB2的网页转换为PostgreSQL中相同的数据/表/etc。我遇到了一个问题,在DB2上通常在不到1秒的时间内运行3万行的查询在PostgreSQL上运行需要几个小时。
查询类似于:
select (
select sum(b.numfield)
from tableone a
join tabletwo b
on a.oneid = b.twoid
where c.custno = a.custno
)
from tablethree c
我试图转换的实际查询要大得多,但通过调试,我发现这是最简单的示例。
我刚在
我有三个数据库。
DB1 - I need to count the rows in Table2.column1 by RefNum from DB3
DB2 - Use the count from DB1 to update List table, QtyAdd column
DB3 - contains a RefNum that both DB1 and DB2 use.
下面的查询将从DB1中进行计数,并在DB2中更新QtyAdd列。我无法理解的是如何使用来自RefNum的DB3添加到SELECT语句和UPDATE部分。
UPDATE List
SET QtyAdd = i.QTY
我有一个DB2 SELECT查询,它需要很长时间才能完成。有没有更简单的方法来达到同样的效果?
Select count(*)
from leaveprocess,processlog,leave_type, user_master
where leaveprocess.process_id = processlog.process_id
and user_master.user_id = leaveprocess.create_id
and leaveprocess.leavetype_id = leave_type.serial_no
and leaveprocess.le
我尝试以以下方式运行SPUFI中的查询:
select * from (select * from emptable
order by empno asc fetch first 10 rows only) as A
order by empno desc fetch first 1 rows only;
返回的错误是:
sqlcode = -4700,错误:尝试在新函数模式之前使用新函数。
我正在运行DB2 for z/OS版本9。
这是迄今为止我在SQL Server中遇到的最奇怪的事情:
数据库1: TableA Id、FieldXYZ
TableB Id,FieldXYZ
DB2: TableA ID,FieldXYZ
TableB Id,FieldXYZ
Query 1 in DB1:
Select *, 'Unmapped' as Flag
FROM TableA
Where NOT EXISTS (Select * FROM TableB B JOIN TableA A ON ISNULL(B.XYZ,'')=ISNULL(A.XYZ,''))
Result
我是DB2世界的新手,正在使用:- DB2 .NET数据提供者(IBM.Data.DB2.dll版本9.7.4.4) -使用.NET Framework4.0的C# VS2010
我试图翻译以下C#查询语句:
TestQuery(() => db.Customers.Any());
to (DB2) SQL查询:
SELECT CASE WHEN (EXISTS(
SELECT NULL
FROM "CUSTOMERS" t0
)) THEN 1 ELSE 0 END AS "value"
上面的查询工作在MS无故障上
此查询在Oracle中运行良好。但它并不适用于DB2。它是在投掷
DB2 SQL错误: SQLCODE=-811,SQLSTATE=21000,SQLERRMC=null,DRIVER=3.61.65
当THEN子句下的子查询返回2行时出错。
但是,我的问题是,为什么它首先要执行,因为我的WHEN子句总是假的。
SELECT
CASE
WHEN (SELECT COUNT(1)
FROM STOP ST,
FACILITY FAC
WHERE ST.FACILITY_ID = FAC.FACILITY_ID
AND FAC.IS_DOCK_SCHED_FA
我有一个DB2查询,我想使MySQL兼容:
UPDATE
(
SELECT x.name, row_number() over () as rown from XYZ x where x.id = '123' and
x.div='abc')A
SET
A.name = 'name_1'
where
A.rown<= ( select count(*) -1 from XYZ where id='123' and div='abc');
现在,我试着写这个-- MySQL
UPDATE
(
为什么这个简单的查询在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。
我正在尝试将下面的MSSQL查询转换为DB2查询。但我正面临着一些问题。我知道DB2不存在“交叉申请”
Server查询:
SELECT DISTINCT p.ID,
p.COMPANY,
p.NAME,
format(d.startTime, 'yyyy-MM-dd HH:mm:ss.fff')
FROM PROCESS p
CROSS APPLY (SELECT MAX(END_TIME) AS startTime FROM PROCESS WHERE ID = (SELECT MAX(ID) FROM PROCESS)) AS d
WHERE p.ID = (SELEC
在Db2中运行相同的查询,但在oracle中它会产生错误。请帮帮忙。提前谢谢。
delete from (SELECT
EMP_ID,
SAL,
ROW_NUMBER() OVER (PARTITION BY EMP_ID ORDER BY SAL DESC) As RN
FROM FPM.FACT_PL_BS
WHERE MEASUREMENT_PERIOD_ID=20170811
AND SCENARIO_ID=1) A where RN>1}
我正在运行一个DB2/SQL -完全连接查询。
PROC SQL;
CONNECT TO db2 AS db1 (USER=&dpwuscod. PASSWORD=&dpwpwcod. DATABASE=&dpwdbnam.);
CREATE TABLE result3 AS
SELECT *
FROM CONNECTION to db2
(
SELECT count(* ) as NbrCount
FROM a
我有一个外壳脚本,将连接到数据库,并获得结果。我的脚本如下
#!/bin/bash
getResults()
{
db2 "connect to ${1} user ${2} using ${3}"
db2 "set schema ${4}"
status=`db2 -x "select status from results where id=1"`
echo $status
}
#MAIN STARS HERE
getResults dbname foo bar test
现在,我希望使用以下命令从结果表中获取
我在DB2中有一个简单的查询。我从上面的第二行出了个错误。因为某个原因,它不想运行我的上(分区)行?
with core as(
select *,row_number() over(partition by asgnd_to_pin order by stdt asc) as rank
from mhal_rep.stushh
where stus_cd in ('DWRT', 'FINL', 'DWFL', 'DWR', 'DWSR', 'DWPC')
AND STDT BETWEEN
我正在使用Db2,今天我运行了这个查询。
MERGE INTO table1 AS A
USING (VALUES('${user.email}')) AS TMP(EMAIL)
ON A.EMAIL=TMP.EMAIL
那么,在这部分关键词AS中,它是否将TMP创建为一个新表?
我试着用MySQL做一些类比,但它告诉我错了。
select *
from table1 join
table2 using (id) as TMP(EMAIL);
我正在使用DB2连接的SSIS中运行下面的select查询。
SELECT
(SELECT COUNT(*) FROM tbl.Test) AS NoOfDest
FROM tbl.Index
FETCH FIRST 1 ROW ONLY;
当此查询没有结果时,我将在SSIS中获得以下错误。
指定了单行结果集,但未返回任何行。
因此,我尝试在DB2中返回DB2,而不是“空/无结果”。我试过以下几种方法。
SELECT
(COALESCE((SELECT COUNT(*) FROM tbl.Test), 0)) AS NoOfDest
FROM tbl.Index
F
我目前在db2中遇到了以下表格的问题:
Table_1
A B C
1 2 1
2 1 2
3 2 2
4 1 1
Table_2
A
1
我要选择B或C大于table_2中最大A的所有table_2记录。结果应该是:
Query
A B C
1 2 1
2 1 2
3 2 2
这是我目前使用这个查询实现的:
select A, B, C
from Table_
我正在DB2中执行以下查询:
select
SUM (orders.totalproduct
+orders.TOTALTAX
+orders.totalshipping
-orders.totaladjustment) as amount1
from
orders
where
amount1>10000
查询没有执行,而是得到了这个异常:
"AMOUNT1“在使用它的上下文中无效。SQLCODE=-206,SQLSTATE=42703,DRIVER=3.64.96 SQL代码:-206,State: 42703
DB2 UDB v11.x。
是否可以在使用CASE的更新查询中使用FETCH FIRST?我有点理解为什么它不工作,但想知道是否有一种方法。例如:
db2 "UPDATE mytable SET cstate = CASE WHEN cstate = 801 THEN cstate = 1 AND rstate = 1 WHEN cstate = 804 THEN cstate = 4 AND rstate = 4 END FETCH FIRST 20000 ROWS ONLY"
这会导致一次只更改一行。
已尝试:
db2 "UPDATE mytable SET cs
我想知道是否必须在DB2中使用DB2语句,或者在MySQL中使用LIMIT语句,如果我使用表中的索引查询唯一id以提高性能。还是sql提供程序已经注意到,在找到行时,最大结果只有一个并停止查询?
示例查询:
DB2:SELECT * FROM myTable WHERE id = 1 FETCH FIRST 1 ROWS ONLY
MySQL:SELECT * FROM myTable WHERE id = 1 LIMIT 1
有人想过这件事吗?