0

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

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

更好的说法是,客户从下拉列表中选择一个城市和该城市的类别。当客户端点击下一步时,会显示该城市中符合该类别的各个地方。但我无法弄清楚我要去哪里错了。

现在,当客户选择一个城市时,每个城市都会读取两条记录,一个正确的城市代码和一个以“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 作为客户的结果太多了,但所有城市都在那里

对于此特定示例,应仅显示一条记录,第二条记录 在此处输入图像描述

4

2 回答 2

0

虽然我不喜欢使用 SELECT *,但您知道更多您想要的实际列,我把它留给您。查询应该很简单,因为您主要查看特定省份代码的“City”表,但不以“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'

现在,每个客户的多条记录问题。如果您加入的只是客户表的省代码,您将获得笛卡尔结果...但是如果您加入客户的 ProvinceCode AND City,您将只获得匹配的单个结果...但我们没有客户表详细信息来确认该列关系。

于 2013-06-14T14:28:13.637 回答
0

问题是不完整的 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'
于 2013-06-14T14:31:51.090 回答