【发布时间】:2013-06-14 09:26:19
【问题描述】:
我正在尝试创建一个选择语句
我需要从一个表中收集一条与另一个表中使用的代码相同的记录。
更好的说法是,客户从下拉列表中选择一个城市和该城市的类别。 当客户端点击下一步时,会显示该城市中符合该类别的各个地方。 但我不知道哪里出错了。
现在当客户选择一个城市时,每个城市都会读取两条记录,一个正确的城市代码和一个以“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')
但这带来了比预期更多的结果
这是使用 access 数据库完成的,但我使用 SQL 进行编码,我将其重新写入 access。这不是问题
所以如果有人可以提供 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 作为客户的结果太多了,但所有城市都在那里
对于这个特定的例子,应该只显示一条记录,第二条
【问题讨论】:
-
在您的最后一个查询中,JOIN 条件包括
city.provincecode,但city不起作用:该JOIN 位于Customers表和您别名为x的派生表之间。 -
好的。我将选择 c.{Description] 更改为 c.*,表示 x.Provincecode(源自表格)并且有点工作。 distinct 会给我一个,没有,我得到 12 个结果。
-
如何从那里改进它? (抱歉之前的评论拼写错误)
-
如果没有一些具有代表性的样本数据或其他附加信息,这很难说。听起来您希望返回一条记录,并且(我认为)您说添加
DISTINCT返回了一条记录,所以它不是正确的吗? -
没有。如果我不使用 distinct,从上面的示例中我会得到 12 条记录。只有一个是正确的。但是在某个地方,一个子句正在返回所有记录。使用 distinct 当然会消除额外的东西,但为了将来的使用,我想看看是什么导致了额外的东西。我需要将like子句放在某个地方,只是找不到地方
标签: sql database ms-access subquery