这样的SQL语句应该怎么写?(在线给分)

booker 2002-07-25 10:15:03
我有两个表,都是有两个字符型的字段。表A的内容是:
'C001','A类'
'C004','D类'
'C002','B类'
'C003','C类'

表B的内容是:
'C00101','a.1项目'
'C00102','a.2项目'
'C00301','c.1项目'

现在我想写一条select语句得到如下的表:
'C001','A类'
'C00101','a.1项目'
'C00102','a.2项目'
'C004','D类'
'C002','B类'
'C003','C类'
'C00301','c.1项目'

注意,数据的存储顺序很重要,因此不能改变数据存储的原先后顺序。

求这样的SELECT语句应该怎么写?谢谢大家了
...全文
26 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
_Shakespeare 2002-07-28
  • 打赏
  • 举报
回复
to OpenVMS(半知半解) mysql有新版本支持嵌套查询吗
OpenVMS 2002-07-28
  • 打赏
  • 举报
回复
SELECT code,value FROM test1 where code not in (select left(code,4) from test2)
UNION
SELECT code,value FROM test2
ORDER BY left(code,4)
OpenVMS 2002-07-28
  • 打赏
  • 举报
回复
too simple :-)

SELECT code,value FROM test1
UNION
SELECT code,value FROM test2
ORDER BY left(code,4)
drc 2002-07-25
  • 打赏
  • 举报
回复
我搞定了:

SELECT a AS aaa, a1 AS bbb
FROM A
UNION
SELECT b, b1
FROM B
ORDER BY aaa

是不是很简单!
booker 2002-07-25
  • 打赏
  • 举报
回复
肯定是不能排序的,只能用建表时存储的循序,不过有一个自动增1的ID字段。数据库用的是SQL Server
icevi 2002-07-25
  • 打赏
  • 举报
回复
你这里不可避免要用排序的,但你的表看不出来是怎么排序的。

还有你是用什么数据库?

知道这两点就好办了。
icevi 2002-07-25
  • 打赏
  • 举报
回复
你这里不可避免要用排序的,但你的表A看不出来是怎么排序的。

还有你是用什么数据库?
mmzxg 2002-07-25
  • 打赏
  • 举报
回复
还是通过存储过程来实现吧!
这样可能比较简单一点!
icevi 2002-07-25
  • 打赏
  • 举报
回复
你这里不可避免要用排序的,你想保持原来的顺序,但你的表看不出来是怎么排序的。

还有你是用什么数据库?
icevi 2002-07-25
  • 打赏
  • 举报
回复
做是肯定可以做的,但是有两个问题:
1:你这里不可避免要用排序的,但你的表A看不出来是怎么排序的。

2:还有你是用什么数据库?
booker 2002-07-25
  • 打赏
  • 举报
回复
差不多,我好好想了想,修改一下要求,我得到的表应该是这样:
'C001','A类'
'C00101','a.1项目'
'C00102','a.2项目'
'C003','C类'
'C00301','c.1项目'

仍然是强调顺序,从表A中读一条,看表B是否有相映的项目,如果有,就显示表A和表B,如没有,则读下一条表A的内容。

本来用简单的SELECT语句通过编程多次读取数据库应该没问题,可我想减少读取数据库的次数来提高效率,不知道能否用一条SELECT语句就搞定?
_Shakespeare 2002-07-25
  • 打赏
  • 举报
回复
这么智能化我想一条语句实现起来不太容易吧
booker 2002-07-25
  • 打赏
  • 举报
回复
差不多,我好好想了想,修改一下要求,我得到的表应该是这样:
'C001','A类'
'C00101','a.1项目'
'C00102','a.2项目'
'C003','C类'
'C00301','c.1项目'

仍然是强调顺序,从表A中读一条,看表B是否有相映的项目,如果有,就显示表A和表B,如没有,则读下一条表A的内容。

本来用简单的SELECT语句通过编程多次读取数据库应该没问题,可我想减少读取数据库的次数来提高效率,不知道能否用一条SELECT语句就搞定?
newly_ignorant 2002-07-25
  • 打赏
  • 举报
回复
赫赫,有点搞

要求是不是这样:
显示一行A中内容,查看B中是否存在A类项目,如果存在显示它们
依次类推

我看可以使用游标来实现,具体语句等有空再说。
_Shakespeare 2002-07-25
  • 打赏
  • 举报
回复
楼主的这个要求很智能化的,一条语句有困难
首先,每个表中的记录不一定是按照你所说的COO1那个字段排序的-----由于一条select语句执行的时候要在两个表中进行,所以不能保证执行的先后。楼上几位的语句都有漏洞,没有考虑到所有的情况
所以,我的看法是一条语句是没有办法来实现这么智能化的查询的,用临时表试试

获壳依毒间---《蓝血人》里面的

booker 2002-07-25
  • 打赏
  • 举报
回复
Re:linazhu(时刻关注)

我要的就是表的右关联。


Re: icevi(按钮工厂)
我这里给出的只是我实际问题的一个简单模型,所以在实际中还是有索引的(CODE的第2、3位)
newly_ignorant 2002-07-25
  • 打赏
  • 举报
回复
就是,可以排序就很简单啦
icevi 2002-07-25
  • 打赏
  • 举报
回复
to booker(获壳依毒间) :老兄啊,你不是说不按这个排序吗?你看看你自己得的结果与你题目要求的结果排序是不一样的。
linazhu 2002-07-25
  • 打赏
  • 举报
回复
to booker(获壳依毒间) :sorry 好像是我领会错了楼主的意思,他好像并不

需要在a表中有而b表中没有的纪录,不过我还是将改的给大家看看。


select a.id,a.type
from a left outer join b on a.id = left(b.id,4)
union
select id,type
from b
order by a.id
linazhu 2002-07-25
  • 打赏
  • 举报
回复
to booker(获壳依毒间) :

我试过了你的语句,基本正确的,但不能显示a 表存在,而在b表中不存在对应纪录的纪录

问题在于 test1.code=left(test2.code,4)


另:(获壳依毒间)这个名字很熟,能告诉我是哪里来的吗?
加载更多回复(5)

34,872

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧