我在尝试找出如何编写将返回左表中找到的相同数量记录的SQL语句时遇到了一些问题。从右表获取数据的唯一方法是使用第三个表。当通过链接表连接右表时,返回所有左表记录
例如,我有三个表格,站点,地址和联盟。一个网站(联系人,邮寄地址,所有者和官员)可以有多个联盟,但可能没有与联盟关联的个人或地址。 IE浏览器。一个网站可能有一个联系人,但没有官方指定,或一个网站可能还没有分配一个邮寄地址。 网站(左表)和联营网站通过公共ID链接。 Sites.ID = Affiliations.Site_ID
的联系和地址(右表)通过一个共同的地址记录ID被链接 Affiliations.Address_RID = Addresses.RID
查询我是
SELECT A.ID,
A.NAME,
C.ADDR_1,
C.CITY_NAME,
C.STATE_CODE,
C.POSTAL_CODE
FROM SITES A,
AFFILIATIONS B,
ADDRESSES C
WHERE A.ID = B.SITE_ID
AND B.ADDRESS_RID = C.RID
AND B.AFFILIATION_TYPE = 'MAILING ADDRESS'
ORDER BY A.ID
如果我单独查询网站表,我得到的结果是1580个网站记录。运行上述查询邮件地址我得到1386条记录。我需要返回所有1580个记录,其中包含邮寄地址不存在的记录。 我做错了什么,但我没有看到它。
评论?
谢谢
将您的逻辑分解成2或3个单独的查询,使用临时表来加入它们,以及在SQL中可以清楚地看到自己的逻辑时,可以组合所有子查询。顺便说一下,您目前已加入表格,但您不清楚您加入的是什么。使用join关键字并且不加入where子句 –
我想知道是否使用子查询是要去的路线。实际上有3个我用于过滤器的表格比我在示例中使用的要多。对于符合2个连接表(1580条记录)条件的网站,查询为1。 1根据网站的联系信息产生1521个联系人。而1个邮寄地址返回1386条记录。 –