问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

sql查询问题

发布网友 发布时间:2022-04-08 01:14

我来回答

5个回答

热心网友 时间:2022-04-08 02:44

create table books(id int primary key,articles varchar(100))
insert into books values(1,'1,2,3')
insert into books values(2,'4,5,6')
--select * from books

create table articles(id int primary key,authors varchar(100))
insert into articles values(1,'1,2,3')
insert into articles values(2,'4,5,6')
insert into articles values(3,'4,5,6')
insert into articles values(4,'4,5,6')
insert into articles values(5,'1,2,3')
insert into articles values(6,'1,2,3')
--select * from articles

create table author(id int primary key,authorName varchar(100))
insert into author values(1,'张三')
insert into author values(2,'李四')
insert into author values(3,'王五')
insert into author values(4,'小麦')
insert into author values(5,'小王')
insert into author values(6,'小李')

--select * from author

--drop function MySql1
create function MySql1(@id int)
returns varchar(8000)
as
begin
declare @len int,@ar varchar(100),@sql varchar(8000)
set @sql='select distinct authors from articles where '
select @ar=articles from books where id=1
select @len=len(@ar)
while(@len>0)
begin
if(left(@ar,1)<>',')
begin
select @sql=@sql+'id='+left(@ar,1)+' '
if(@len>1)
select @sql=@sql+'or '
end
set @len=@len-1
set @ar=substring(@ar,2,@len)
end
return (@sql)
end
--select dbo.MySql1(1)
--exec sp_helptext Mysql1

--drop proc Myprc

create table MyetempTB(chr varchar(100))

create proc Myprc(@Myii int)
as
begin
declare @sql varchar(8000) set @sql=dbo.Mysql1(@Myii)
exec (@sql)
end
go

--drop proc Myprc2
create proc Myprc2(@Myii int)
as
begin
delete from MyetempTB
insert into MyetempTB exec dbo.Myprc @Myii
declare @ret varchar(8000)
set @ret = ''
select @ret = @ret+','+chr from MyetempTB
set @ret = stuff(@ret,1,1,'')
declare @sql varchar(8000)
set @sql='select distinct * from author where '
declare @len int set @len=len(@ret)
while(@len>0)
begin
if(left(@ret,1)<>',')
begin
select @sql=@sql+'id='+left(@ret,1)+' '
if(@len>1)
select @sql=@sql+'or '
end
set @len=@len-1
set @ret=substring(@ret,2,@len)
end
exec (@sql)
end
go
执行:
exec Myprc2 1

测试结果如下:
(所影响的行数为 2 行)

(所影响的行数为 2 行)

id authorName
----------- ----------------------------------------------------------------------------------------------------
1 张三
2 李四
3 王五
4 小麦
5 小王
6 小李

(所影响的行数为 6 行)

--基本逻辑如下:

--首先查询出books表中的articles
--MySql1函数:
--它是将articles查询出的结果拼凑成一条查询语句,此条查询语句拼凑后基本如下:
--'select distinct authors from articles where id=1 or id=2 or id=3'
--当然如果查询出的结果是7,8,9 那拼凑后的语句就是:
--'select distinct authors from articles where id=7 or id=8 or id=9'

--create table MyetempTB(chr varchar(100))是建立一个转储表,这个表是不可缺少的

--存储过程 Myprc(@Myii int)是将拼凑的语句查询出表

--存储过程Myprc2函数主要步骤:
--将Myprc查询出的表利用临时转储表储存,在将转储表的authors字段内的所有内容组合起来拼凑成查询语句
--转储表的内容是两行数据:
--第一行: 1,2,3
--第二行: 4,5,6
--内容组合: 1,2,3,4,5,6
--查询语句拼凑后如下:
--'select distinct * from author where id=1 or id=2 or id=3 or id=4 or id=5 or id=6'

--执行Myprc2 参数是你要查询的ID

--执行结果当然是楼主你想要的数据了
--楼主可以多插入一些测试数据,测试一下是否正确

热心网友 时间:2022-04-08 04:02

select * from author where id in(select authors from articles where id in (select artices from books where id =1) )

没列名,不能给出查询条件。

没有LIKE就不嫩查吗?什么逻辑?这里都说了查ID是1的名单,LIKE个毛啊!

热心网友 时间:2022-04-08 05:36

select * from author a ,authors b ,books c
where a.id =b.authors
and b.id =c.articles
and c.id =1

热心网友 时间:2022-04-08 07:28

上面两位纯粹是胡乱回答

一对多连接关系, 外键关系需要保存在多的那张表里, 的你这数据表设置完全反了, 如果是刚开始做, 建议修改数据结构吧, Books表删除Articles列, Articles表增加BooksId列来保存文章对应的书籍, 并删除authors列, authors里面增加articlesId列来保存作者对应的书籍, 如果是在多对多关系, 则关系需要另外建表

热心网友 时间:2022-04-08 09:36

兄弟你这样设计好像违反了3范式。。好像连第一范式不满足不了。。如果要多对多的话。。建一个中间表吧。。。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
人大政协辅助岗是什么 政务辅助人员是干什么 政府辅助人员是什么 努比亚的海拔什么意思 北非努比亚现在怎么样了啊 相邻权的相关法律 梦见老公离世了什么预兆 梦见自己老公走掉 你出轨后 怎么操作才没被发现? 评评怎么造句 雅思大作文如何表示自己是中间观点 雅思作文观点类的可不可以写两方都有用 雅思作文什么情况写一个观点,什么情况写两个观点?举例说明下,谢谢。 雅思作文,思路有点儿乱...“给出一个观点,问what is your opinion”,怎么写?用一道题举例: 雅思大作文如何表示自己是中间观点?不影响分数为前提 qq上我发错了评论 怎么删除速度 qq评论怎么删除 雅思大作文观点解析:控制人口增长是好举措吗 谁会查询苹果手机的电池续航情况啊?一定给好评 雅思作文让你讨论两种观点并给出自己建议的文章怎么写,也就是说两种观点怎么讨论 是阐述还是评述观点好坏 腾讯网页用QQ的评论怎么删除 苹果手机上怎么查看电池使用次数 lol刀妹是哪个电影片段 LOL刀妹玩的时候有什么技巧? 综合评价,英雄联盟里面最强的英雄是哪一位? 《英雄联盟》刀妹是什么英雄? 怎么看苹果电池续航是否正常 英雄联盟刀妹 lol刀妹从1级到后期的所有出装 LOL刀妹和刀妹SOLO详情如下 保险业务员买个车险给提多少 保险公司车险提成多少 车保险提成怎么算的 郑州油烟机清洗服务上门贵不贵?有隐形收费吗? 梦见老家床底下有人拉住我的腿怎么办 梦见有人拽我一只腿 可是我又看不到他人 油烟机上门清洗多少钱 梦见被人拉着腿,最后又逃脱了 梦见跟一个陌生女人走进桥洞里上来的时候下面有人拉着我的腿? 梦见有东西拉着自己的腿往下拖 做梦跳过悬崖可有人拽着我的腿 百度云网盘空间不够用,怎么办? 怎么免费扩充网盘容量 我弟弟想知道大一点的云盘有没有知道的? 职场中,哪些话题属于「聊天禁区」? 求 裂口女 百度网盘免费资源下载链接,谢谢 梦见别人请我们全家吃饭 说话有讲究,职场中如何正确说话? 职场中和高情商的人聊天,都会收获哪些好处? 第一次坐火车 我想问一下 进入自己的车厢后 是往左边走还是往右边走?