问一个关于标准的SQL的问题(50分)

  • 主题发起人 主题发起人 笑傲江湖1976
  • 开始时间 开始时间

笑傲江湖1976

Unregistered / Unconfirmed
GUEST, unregistred user!
如果用WHERE 来实现关联A,B表,如何取得A中的所有记录,即使A。ITEM=B。TEM的关联条件不
满足?不能用LEFT JOIN 等语句,因为DBMS不支持这样的语句。最好是标准的SQL语句。符合
SQL90或92。
 
select *, (case (select * from b lefttable where lefttable.tem = masttable.tem)
when null then ' ', '', '', '',...
else select * from b lefttable where lefttable.tem = masttable.tem end)
from a masttable

没测试过!
 
select a.*,某些b表字段为空或0
from a,b
where a.item<>b.item
union all
select a.*,某些b表字段
from a,b
where a.item=b.item
 
CASE WHEN 不是标准的SQL语句呀,最初是这样的
SELECT A。FIELD1,B。FIELD1 FROM A,B WHERE A。ITEM=B。ITEM
比如在A中有ITEM=001的记录,而B中没有ITEM=001的记录,那么返回的记录集中不包括
ITEM=001的记录,我希望得到A中的所有记录,如果没有关联到则B的字段返回NULL。
在MS SQL中可以这样 SELECT A。FIELD1,B。FIELD1 FROM A,B WHERE A。ITEM*=B。ITEM
可以做到,但是我用的这个DBMS不支持这样的写法,标准的写法是什么样子的。
 
To ugvanxk 如果加了不等于的条件后,记录集里面增加了天文数字的记录,因为表B中的记录有
十几万条,再说这些记录不符合条件呀。
 
不好意思,忘了CASE不是标准语句了!
其实把ugvanxk的改一下也行:
select a.*,b.* from a,b
where a.item in (select item from b)
union all
select a.*,'','','','',...--(从B中取几个字段,就写几个'')
from a,b
where not a.item in (select item from b)

 
SELECT A。FIELD1, null as Field2 from a where a.item not in(
(select item from b)
union
select a.field1, b.FIELD1 FROM A,B WHERE A。ITEM=B。ITEM
 
只需这样就行了:SELECT A.FIELD1,B.FIELD1 FROM A,B WHERE A.ITEM=B.ITEM(+)
 
呵呵,很困难。
连left join都不支持,一定是很低级的数据库
无法操作大数据量的
 
谁说标准的sql没有左连接的?left join 换成在where 条件后面用*=表示左连接,=*表示有连接
 
ACCESS中不支持*=形式,但它支持子查询
 
to sallypo:
access不可以用left join 吗????????????????????????
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
825
DelphiTeacher的专栏
D
D
回复
0
查看
831
DelphiTeacher的专栏
D
D
回复
0
查看
664
DelphiTeacher的专栏
D
后退
顶部