繁体   English   中英

子查询上的子查询

[英]Subqueries on subqueries

我正在尝试创建一个选择语句

我需要从一个表中收集一条记录,该记录等于另一张表中使用的相同代码。

更好的是,客户从下拉列表中选择城市和该城市的类别。 当客户单击下一步时,将显示该城市中符合该类别的各个地点。 但我不知道我要去哪里。

现在,当客户选择一个城市时,每个城市都会读取两条记录,一个正确的城市代码和一个以“ bx”作为首字母的邮政信箱代码

在我的第一个查询中,为了消除重复,我说

select c.[Description] from city c 
where c.Provincecode like 'EC' and 
      c.citycode in (select c.citycode from City c 
                     where SUBSTRING(c.citycode,0,3) not like 'bx')

给我一个城市的名字

但是现在,如果客户选择了例如仅现金看的地方,那么结果中应该只显示一条记录

但是我会尽力而为,我无法获得正确的语法

我试过了:

select c.[Description] from city c 
where c.Provincecode like 'EC' and 
      c.citycode in (select c.citycode from City c 
                     where SUBSTRING(c.citycode,0,3) not like 'bx') 
      and exists (select * from Customers cu 
                  where cu.Category like 'SC' and cu.Province like 'EC')

但这带来了超出预期的结果

这是使用访问数据库完成的,但是我正在使用SQL进行编码,并将其重新编写为访问。 那不是问题

因此,如果有人可以提供SQL答案,那么我可以从那里完成其余的工作

我不确定是否应该参加。 我确实尝试过

select * from 
(select c.[Description] from city c 
 where c.Provincecode like 'EC' and 
       c.citycode in (select c.citycode from City c 
                      where SUBSTRING(c.citycode,0,3) not like 'bx')) x 
join Customers on  province=city.provincecode where Category like 'SC'

但我收到无法绑定多部分标识符的错误


编辑

这是新查询

select * 
from 
    (
        select c.* 
        from city c 
        where c.Provincecode like 'EC' 
            and c.citycode in
                (
                    select c.citycode 
                    from City c 
                    where SUBSTRING(c.citycode,0,3) not like 'bx'
                )
    ) x 
    join 
    Customers  
        on  province=x.Provincecode 
where Category like 'SC'

返回的是 在此处输入图片说明

如您所见,有太多以C Strydom为客户的结果,但是所有城市都在那里

对于此特定示例,仅应显示一条记录,第二条记录 在此处输入图片说明

尽管我不喜欢使用SELECT *,但您确实希望了解更多实际的列,但我将其留给您。 查询应该很简单,因为您主要是在查看“城市”表中的特定省份代码,但不能以“ bx”开头。 只需在where子句中使用它即可...您可以测试一条记录的多项内容,而不必根据其他条件加入自身。 一旦有了,就可以简单地连接到您要限制的类别的客户表。

select *
   from 
      city c 
         JOIN Customers CU
            on c.ProvinceCode = CU.Province
           AND CU.Category like 'SC'
   where 
          c.ProvinceCode like 'EC' 
      and NOT substr( c.CityCode,0,3 ) = 'bx'

现在,您为每个客户发行了多个记录。 如果您要加入的只是客户表中的省代码,您将得到笛卡尔结果...但是,如果您加入到客户的省代码和城市中,则只会得到与之匹配的单个代码...但是我们没有客户表详细信息来确认该列关系。

该问题是JOIN的不完整(有关详细信息,请参阅问题注释)。 工作的查询是

select * 
from 
    (
        select c.* 
        from city c 
        where c.Provincecode like 'EC' 
            and c.citycode in
                (
                    select c.citycode 
                    from City c 
                    where SUBSTRING(c.citycode,0,3) not like 'bx'
                )
    ) x 
    INNER JOIN 
    Customers 
        ON Customers.province=x.Provincecode 
            AND Customers.city=x.Citycode 
where Category like 'SC'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM