Sybase SQL加入RESULT SET

时间:2015-10-02 14:33:05

标签: sql sybase

我的两个表的结果集存在问题。

我创建了两个表。

        bool retVal = false;

        X509Chain chain = new X509Chain();

        chain.ChainPolicy.ExtraStore.Add(rootCertificate.X509);

        chain.ChainPolicy.RevocationMode = X509RevocationMode.NoCheck;

        retVal = chain.Build(leafCertificate.X509);

        return retVal;

我想得到这些表的结果集。

如果我将此查询与 create table person (ID int not null PRIMARY KEY, NAME varchar (50) ) create table address ( ID int NOT NULL PRIMARY KEY, PERSON_ID int not null, ADDRESS VARCHAR (20) null, ZIP int) insert into person (ID, NAME) values ( 1,'Hans') insert into person values (2,'Peter') insert into address values (1,1, 'Andernach',56626) insert into address values (2,2,'Koblenz',56000) insert into address values (3,3,'Neuwied',56100) 一起使用 我得到了正确的结果。

但是如果我使用p.ID = a.PERSON_ID的查询 我得到了很多结果

p.ID != a.PERSON_ID

我的问题:为什么我会使用select a.ADDRESS, a.ZIP, a.PERSON_ID, p.NAME from address a, person p where a.PERSON_ID != p.ID 获得大量结果?

由于 : - )

1 个答案:

答案 0 :(得分:0)

因为第一个表中的许多行与第二个表中的许多行不匹配。实际上,第二行中的几乎所有行都匹配第一个中的每个。大概你想要:

select  a.ADDRESS,
        a.ZIP,
        a.PERSON_ID,
        p.NAME
from person p left join
     address a
     on a.PERSON_ID = p.ID 
where p.id is null;

这会导致person中没有地址的行。 (将表格放在其他顺序或使用right join会得到没有人的地址。)