请问这个SQL语句如何写?(100分)

  • 主题发起人 主题发起人 MichaelZhu
  • 开始时间 开始时间
M

MichaelZhu

Unregistered / Unconfirmed
GUEST, unregistred user!
各位,我有三个表,表A中有一主键字段AA;表B中有一主键字段BB;表C是AA与BB的对应表,有
另一字段作主键.AA与BB的关系可能是一对一,一对多,多对一,多对多.我现在要将所有一对
一关系的字段(AA,BB)求出,请问这个SQL语句如何写?(能尽量简短是最好)

 
补充一点:如何在Delphi编程中使用这一语句?
 
在Delphi中,我写了如下语句,执行时说TABLE是只读的!这是怎么回事?
select a.AA,b.BB,count(a.BB),count(b.AA)
from C a, C b
where a.AA=b.AA
group by a.AA,b.BB
having count(a.BB)=1 and count(b.AA)=1
order by a.AA,b.BB
 
难道没人能回答吗?
呜呜呜......
 
不明白你的语句是要做什么。。。
 
我的意思是,不管用哪个表,将AA与BB是一对一关系的求出来,你可以不管我写的语句.
 
查查SQL SERVER2000 HELP:
LEFT OUTER JOIN
RIGHT OUTER JOIN
会对你有帮助.
你的关联没说明白.
 
可否在三个表中按你的要求给几个具体的数据。我可以帮你看一下.
 
select aa,bb
from c
having count(*)<=1
group by aa,bb
 
你的DELPHI程序是怎么写的。我想问题在这个上面。。。。。。
 
DELPHI中,也就是TQUERY调用.在程序中执行OPEN时,DELPHI报错.
例表如下:
表a:
字段:AA ....
值 :abc
abd
......

表b:
字段:BB ....
值 :123
234
......

表c:
字段:ID,AA,BB
值 :1,abc,123
2,abd,234
3,abc,246
4,xyz,123
......
 
select c.aa,c.bb from c where c.aa not in(
select distinct c1.aa from c c1,c c2 where c1.aa=c2.aa and c1.cc<>c2.cc) and
c.bb not in (select distinct c1.bb from c c1,c c2 where c1.bb=c2.bb and c1.cc<>c2.cc)

其中,cc是c表的关键字
 
两个表之间是不允许有多对多的关系的。
 
to MichaelZhu:
我试了一下你的SELECT语句,也是用一个TQUERY,
但是在我这里也没有报错。而且好像结果在我设计的数据中也是正确的。
请您检查一下你的DELPHI语句是不是有错。
可以的话,将代码给我看一下。
 
To MichaelZhu:
你的SQL语句有问题,例如在这种情况下:
ID AA BB
1 a 1
2 a 2
3 b 2
4 c 3
你的sql语句结果返回的结果集是两条,(b,2) (c,3),而正确的只应该是一条(c,3)对吗?

可以试试以下写法:
Select *
from c t1
where (select count(*) from c t2 where t1.AA= t2.AA ) = 1
and (select count(*) from c t3 where t1.BB= t2.BB ) = 1

---over----:)


 
感谢各位的帮忙!我写的SQL语句的确有问题.
TO zhangfu_mail 和 Dolly:
在Query Analyzer 中,我运行两位的语句,得出的结果是一样的,但是写入Delphi中TQUERY
的SQL中,在OPEN时还是不能通过.
其实,在代码中,我只是执行了一个SQL.CLOSE;跟着一个SQL.OPEN时即时报错!
我用的是D6,UPT2
北斗,有何看法?
 
我用的是D5,UPT1,QUERY的SQL用的就是你的,一点没变。
运行,QUERY。OPEN也没有什么问题。
 
Select * from c
where AA in (Select AA from c group by AA having count(*) = 1) and
BB in (Select BB from c group by BB having count(*) = 1)
 
多人接受答案了。
 
后退
顶部