22 September 2009

Informix: What tables is in each dbspace?

SQL บน Informix ที่ไว้หาว่าแต่ละ dbspace มี table อะไรอาศัยอยู่บ้าง

dbaccess {dbname}
select
dbinfo( "DBSPACE" , pe_partnum ) :: char(10) as dbspace
,b.dbsname[1,10] dbsname
,b.tabname[1,30] objname
,case when c.tabid is null then 'i' else 't' end as objtp
from
sysmaster@{instancename}:sysptnext a
, sysmaster@{instancename}:systabnames b
, outer {dbname}@{instancename}:systables c
where
a.pe_partnum = b.partnum
and b.tabname = c.tabname
and b.tabname not like 'sys%'
and b.dbsname='{dbname}'
and dbinfo( "DBSPACE" , pe_partnum ) :: char(10) = '{dbspacename}'
group by 1,2,3,4
order by 1,2,3,4;

14 September 2009

Informix: Left Outer Join

เพิ่งรู้ว่า
select a.key1, a.key2
,sum(col_1)::int
from TabA a left outer join TabB b
on a.cust_numb = b.cust_numb
and a.subr_numb = b.subr_numb
and b.data_dt = '2009-01-01'
and a.store_cd = 'STORE1'
group by 1,2
นอกจากจะช้านรกแล้ว ยังให้ผลลัพธ์ผิดอีกด้วย ผลลัพธ์ที่ได้จะมี store_cd อื่นๆ นอกเหนือจาก STORE1 ปนมาด้วย ถ้าอยากให้ถูกต้อง ต้องเขียนแบบนี้
select a.key1, a.key2
,sum(col_1)::int
from TabA a, outer TabB b
where a.key1 = b.key1
and a.key2 = b.key2
and b.data_dt = '2009-01-01'
and a.store_cd = 'STORE1'
group by 1,2
ว่างๆ จะหาเหตุผลว่า ทำไม query แรกมันถึงผิด?