数据库查询的问题(在两个表中)

wrrlpx1234 2007-11-14 11:08:00
我现在有两个表
A表
~~~~~~
id name kc_name1 kc_name2
1 张三 中学诗词选 散文大家
2 李四 中考精要 中学诗词选
3 王五

B表

~~~~~~
id kc_name kc_title
1 中学诗词选 刘玉民
2 散文大家 申炳
3 中考精要 王玉昆
~~~~~~~~~~~~~~~~~~~~~

我的思路是这样的,A表中的kc_name1、kc_name2为B表中的KC_name的内容
我现在想做一个页面,
~~~~~~~~~~~~~~~~~~~~~~~~~
名称 作者 借阅者
中学诗词选 刘玉民 张三,李四
~~~~~~~~~~~~~~~~~~~~~~~~~~

我想问一下,名称和作者在B表中,而借阅者在A表中,如何达到这个页面的要求,
对于SQL语句又该如何写呢,
...全文
79 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiubin200236 2007-11-14
  • 打赏
  • 举报
回复
select kc_name,kc_title,name from A表,B表 where kc_name1=kc_name or kc_name2=kc_name
zhouyuzhu 2007-11-14
  • 打赏
  • 举报
回复
楼上的方法可以
Go 旅城通票 2007-11-14
  • 打赏
  • 举报
回复
<%
set rs=server.CreateObject("adodb.recordset")
'加上一个排序,这样比较好处理相同的图书的借阅者
sql="select kc.kc_name,kc.kc_tijiao,yh.yh_name from yh,kc where yh.yh_kc1=kc.kc_name"&_
"or yh.yh_kc2=kc.kc_name order by kc_name desc"
rs.open sql,cnn,1,3
%>
<table width="650" border="0" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<td height="25" background="pic/desktop_bar_bg.gif"> <div align="center">书目名称</div> </td>
<td height="27" background="pic/desktop_bar_bg.gif"> <div align="center">作者</div> </td>
<td background="pic/desktop_bar_bg.gif"> <div align="center">借阅者</div> </td>
</tr>
<%
rs.MoveFirst
dim tempbookname'图书名称临时变量,为后面合并借阅者用的
tempbookname=rs("ck_name")'取得第一本书的名称
dim users'借阅者的连接字符
users=rs("yh_name")'取得第一本书的第一个借阅者
dim author:author=rs("kc_tijiao")
rs.movenext'从第2条记录开始
Do While Not Rs.EOF
if rs("ck_name")=tempbookname then'同一本书则连接借阅者
users=users&","&rs("yh_name")
else'不同一本书时,输出信息,并重新设置tempbookname和users,便于重新开始统计
%>
<tr>
<td height="25" bgcolor="#FFFFFF"> <%=tempbookname%>  </td>
<td height="25" bgcolor="#FFFFFF"> <%=author%>  </td>
<td bgcolor="#FFFFFF"> <%=users%>  </td>
</tr>
<%
'更新变量
tempbookname=rs("ck_name")
users=rs("yh_name")
author=rs("kc_tijiao")
end if
rs.MoveNext
Loop
%>
</table>
zhouyuzhu 2007-11-14
  • 打赏
  • 举报
回复
实现这个有2种方法,
1.你可以在代码中用数组来做,书名为1维,如a(0),借阅者姓名为2维,name(0,0)
2.你可以用动态sql来做,把借阅者姓名按书名进行分类合并,达到你想要的效果
这2种方法都可以,我做过类似的,是用数组做的,用sql的话你来错地方了,你应该去数据库专区,那里高手很多
yujia4616 2007-11-14
  • 打赏
  • 举报
回复
<%
sql="Select [kc_name] from B表"
set rs=Conn.Execute(sql)
if not rs.eof Then
DO While Not Rs.EOf
%>
<!-----------------中间自己加---------------->
<!-----------------中间自己加---------------->
<tr >
<td height= "25 " bgcolor= "#FFFFFF " > <%=Rs( "kc_name ")% >  </td >
<td height= "25 " bgcolor= "#FFFFFF " > <%=Rs( "kc_tijiao ")% >  </td >
<td bgcolor= "#FFFFFF " >
<%
Dim Kcname
Kcmame=""
sql2=" Select name from A表 where kc_name1='"+Rs("kc_name")+"' or kc_name2='"+Rs("kc_name")+"'"
set rs2=Conn.Execute(sql2)
if not rs2.eof Then
DO While Not Rs2.EOf
Kcname=Kcname&Rs2("name")
Rs2.MoveNext
Loop
End If
Response.Write Kcname
>
  </td >
</tr >
<!-----------------中间自己加---------------->
<!-----------------中间自己加---------------->
<%
Rs.MoveNext
Loop
End If
Rs2.Close()
Rs.Close()
Set Rs2=Nothing()
Set Rs=Nothing()
%>
wrrlpx1234 2007-11-14
  • 打赏
  • 举报
回复
麻烦,就此代码,我应该怎么做嵌套循环
Go 旅城通票 2007-11-14
  • 打赏
  • 举报
回复
只能在asp中重新处理数据

或者编写一个存储过程,然后在存储过程把同一本书的借阅者合并起来
yujia4616 2007-11-14
  • 打赏
  • 举报
回复
用嵌套循环来做
wrrlpx1234 2007-11-14
  • 打赏
  • 举报
回复
谢谢各位的用心回复,但是,我按照着来,并没有实现我的目的,
附源代码:

~~~~~~~~~~~
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<%response.buffer=true%>
<!--#include file="conn.asp"-->
<%if session("yadmin")="" then
response.Write "<script LANGUAGE='javascript'>alert('网络超时或者您还没有登录请登录');window.location.href='index.html';</script>"
response.End
end if
%>
<%
set rs=server.CreateObject("adodb.recordset")
sql="select kc.kc_name,kc.kc_tijiao,yh.yh_name from yh,kc where yh.yh_kc1=kc.kc_name or yh.yh_kc2=kc.kc_name"
rs.open sql,cnn,1,3
%>
<table width="650" border="0" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<td height="25" background="pic/desktop_bar_bg.gif"><div align="center">书目名称</div></td>
<td height="27" background="pic/desktop_bar_bg.gif"><div align="center">作者</div></td>
<td background="pic/desktop_bar_bg.gif"><div align="center">借阅者</div></td>
</tr>
<%
rs.MoveFirst
Do While Not Rs.EOF
%>
<tr>
<td height="25" bgcolor="#FFFFFF"><%=rs("kc_name")%> </td>
<td height="25" bgcolor="#FFFFFF"><%=rs("kc_tijiao")%> </td>
<td bgcolor="#FFFFFF"><%=rs("yh_name")%> </td>
</tr><%
rs.MoveNext
Loop%>

</table>
~~~~~~~~~~~~~~~~~~~~~~~

我的本意是:
~~~~~~~~~~~~~~~~
书目名称 作者 借阅者
中学诗词选 刘玉民 张三,李四
~~~~~~~~~~~~~~~~~~~
而现在调试的结果是:

~~~~~~~~~~~~~~~~
书目名称 作者 借阅者
中学诗词选 刘玉民 张三
中学诗词选 刘玉民 李四
~~~~~~~~~~~~~~~~~~~
这到底是为什么呢,

超级玛莉 2007-11-14
  • 打赏
  • 举报
回复

Select b.kc_name,b.kc_title,a.name from A表 a,B表 b Where a.kc_name1=b.kc_name

如果要查“中学诗词选”的话,就再加个条件

And b.kc_name='中学诗词选'
gray820928 2007-11-14
  • 打赏
  • 举报
回复
select b.kc_name,b.kc_title,a.name from b left join a on b.kc_name=a.kcname1 or b.kc_name=a.kc_name2 where...
where后面可以添加其他检索条件

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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