sql server 多表查询 一对多 无法得到正确的结果,请指教

qq2410623850 2012-10-06 03:21:14
SELECT Question.ID,title FROM Question inner JOIN Answer ON Question.id = Answer.qid order by id desc
其中主表Question(问题)的一条记录对应Answer(答案)表的多条记录,Question.id = Answer.qid,
无论是 inner JOIN 还是 left JOIN 得到的结果都不正确

SELECT Question.ID,title FROM Question 得到1009条结果
SELECT Question.ID,title FROM Question inner JOIN 得到1921条结果
SELECT Question.ID,title FROM Question left JOIN 得到2164条结果
我想把两个表连接而得到1009条结果,这个语句应该怎么写?
...全文
145 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
發糞塗牆 2012-10-07
  • 打赏
  • 举报
回复
你是不是想看到有回复的问题的记录啊?如果是:
SELECT Question.* FROM Question inner JOIN Answer ON Question.id = Answer.qid order by id desc
qq2410623850 2012-10-07
  • 打赏
  • 举报
回复
我查了一下,除了我的这种写法,就只能用group by了,不过DBA_Huangzj最用心,就把最佳答案给您吧
qq2410623850 2012-10-06
  • 打赏
  • 举报
回复
我想要的结果就是把两个表关联,然后显示全部主表的记录。但数据的结构是主表1对多副表
發糞塗牆 2012-10-06
  • 打赏
  • 举报
回复
或者你告诉我你想得到什么样的结果?而不是行数
qq2410623850 2012-10-06
  • 打赏
  • 举报
回复
还有DBA_Huangzj这位朋友,您说的方法我试了,没有作用。您能提供一下更好的思路吗?
qq2410623850 2012-10-06
  • 打赏
  • 举报
回复
我想出了这种方法,但总觉得不是好方法
SELECT DISTINCT Question.ID,Question.title FROM Question left JOIN Answer ON Question.id = Answer.qid order by id desc
大家有好的方案吗?
caoyang0299 2012-10-06
  • 打赏
  • 举报
回复
Question 1009,Question 和answer 一对多,当然就是这样子,

先弄明白一对多的数据,你准备显示成什么样,

这样子 Question answer answer ?
發糞塗牆 2012-10-06
  • 打赏
  • 举报
回复
不过你既然可能存在多条Answer ,那就不应该只有1009条啊,除非你只希望看到Question表的信息而已。
發糞塗牆 2012-10-06
  • 打赏
  • 举报
回复
SELECT Question.ID,Question.title FROM Question inner JOIN Answer ON Question.id = Answer.qid order by id desc
發糞塗牆 2012-10-06
  • 打赏
  • 举报
回复
Join的时候把你的主键都加上就可以了,你这情况大多数是没有把主键写全
几天前在盒子看到绿色Sql server很高兴,现将本人对绿色SQL Server的现实思路作一说明,不正确的地方还指教。1. Sqlservr.exe 运行参数。 Sql Server的启动可以为Windows服务方式(默认),也可以以应用程序方式启动。下面介绍sqlservr.exe以应用程序方式启动时的参数问题。sqlservr 应用程序用法:sqlservr [-sinstance_name] [-c] [-dmaster_path] [-f] [-eerror_log_path] [-lmaster_log_path] [-m] [-n] [-Ttrace#] [-v] [-x] [-g number] [-O] [-y number]-sinstance_name 指定要连接到的 SQL Server 实例。如果未指定命名实例,sqlservr 将启动 SQL Server 默认实例。重要 启动 SQL Server 实例时,必须从实例所在的适当目录使用 sqlservr 应用程序。对于默认实例,从 MSSQLBinn 目录运行 sqlservr。对于命名实例,在 MSSQL$instance_nameBinn 目录运行 sqlservr。-c 表示以独立于 Windows NT 服务控制管理器的方式启动 SQL Server 实例。当从命令提示符下启动 SQLServer 时,可使用该选项缩短启动 SQL Server 的时间。(注意:当使用该选项时,无法通过使用 SQLServer 服务管理器或 net stop 命令停止 SQL Server,而且如果已从 Microsoft Windows NT? 系统注销,则 SQL Server 将停止运行。)-dmaster_path指出 master 数据库文件的完全合法路径。在 -d 和 master_path 之间没有空格。-f以最小配置模式启动服务器。然后,系统管理员可对配置选项重新配置(使用 sp_configure 系统存储过程)。-eerror_log_path表示错误日志文件的完全合法路径。如果未指定路径,则默认实例的默认位置是 x:Program FilesMicrosoft SQL ServerMSSQLLogErrorlog,命名实例的默认位置是 x:Program FilesMicrosoft SQL ServerMSSQL$instance_nameLogErrorlog。在 -e 和 error_log_path 之间没有空格。-lmaster_log_path指示 master 数据库事务日志文件的完全合法路径。在 -l 和 master_log_path 之间没有空格。-m表示在单用户模式下启动 SQL Server 实例。如果 SQL Server 是以单用户模式启动的,则只能连接一个用户。CHECKPOINT 机制(它确保完成的事务定期从磁盘高速缓存写入数据库设备中)将不启动。(一般情况下,如果您遇到需要修复的系统数据库问题时,可使用此选项。)-n表示您不想使用 Windows NT 应用程序日志来记录 SQL Server 事件。如果用 -n 选项启动 SQL Server 实例,则最好也使用 -e 选项,否则将不会记录 SQL Server 事件。-Ttrace#表示应使用指定的有效跟踪标记 (trace#) 来启动 SQL Server 实例。跟踪标志用来启动具有非标准行为的服务器。有关可用跟踪标记 (trace#) 的更多信息,参见跟踪标记。重要 当指定跟踪标志时,使用 –T 来传递跟踪标志号。SQL Server 接受小写字母 t (-t);然而,-t 还设置 SQL Server 支持工程师所需的其它内部跟踪标记。-v显示服务器的版本号。-x禁用维护 CPU 统计。-g memory_to_reserve指定内存的兆字节整数,该内存被保留下来用于 SQL Server 2000 内部(进程内)运行的其它应用程序。-O指定不需要分布式 COM (DCOM),从而禁用异类查询。-y error_number如果 SQL Server 2000 遇到在该选项中指定的错误信息,它将把表象堆栈跟踪写入错误日志。可以使用多个 –y 参数指定多个错误。2. 系统数据库路径问题. 一般情况下,正常安装sql server之后,master等系统数据库的路径都是被设置为绝对路径,如果要改正数据库的路径为相对路径,可以使用以下SQl语句: sql:=format(' update sysaltfiles set filename='%s' where filename='%s' ', ['...data'+extractfilename(MDFFile),MDFFile]); ADOQuery1.Close; ADOQuery1.SQL.Text:=sql; ADOQuery1.ExecSQL; sql:=format(' update sysaltfiles set filename='%s' where filename='%s' ', ['...data'+extractfilename(LogFile),LogFile]); ADOQuery1.Close; ADOQuery1.SQL.Text:=sql; ADOQuery1.ExecSQL; sql:=Format('update sysdatabases set filename='%s' where name='%s'', ['...data'+extractfilename(MDFFile),Edit1.text]); ADOQuery1.Close; ADOQuery1.SQL.Text:=sql; ADOQuery1.ExecSQL;大家打开sysaltfiles 表和sysdatabases 一看就知道了,不多说了。除了系统数据库,其它的数据库也可以使用这种方法修改为相对路径。 使用相对路径的好处是可以让你的绿色Sql server随时copy到任意目录或是任意其它机器上启动,并且原来的数据库全部可以使用,如果是绝对路径到了其它机器就不行了。3. 注册表问题: 大家可以看下面的注册表文件Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SQL Server$name][HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SQL Server$nameMSSQLServer]"AuditLevel"=dword:00000000"DefaultLogin"="guest""ListenOn"=hex(7):53,00,53,00,4d,00,53,00,53,00,48,00,37,00,30,00,00,00,53,00, 53,00,4e,00,45,00,54,00,4c,00,49,00,42,00,00,00,00,00"LoginMode"=dword:00000000"Map_"="""Map#"="-""Map$"="""SetHostName"=dword:00000000"Tapeloadwaittime"=dword:ffffffff"uptime_pid"=dword:00001044"uptime_time_utc"=hex:26,57,c8,b3,fb,bb,c5,01[HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SQL Server$nameMSSQLServerCurrentVersion]"CurrentVersion"="8.00.194""RegisteredOwner"="""SerialNumber"="""CSDVersionNumber"=dword:00000300"CSDVersion"="8.00.761""Language"=dword:00000804"checksum"=hex:37,35,32,32,63,31,35,38,61,65,37,64,34,63,64,37,35,30,64,61,30, 33,34,62,37,64,63,32,30,61,36,36,39,37,62,34,61,35,65,36,63,66,62,61,38,37, 39,36,37,31,66,33,39,61,36,65,35,64,30,33,37,36,37,65,64,36,33,30,61,39,63, 36,66,37,36,30,35,65,32,66,34,66,31,33,63,39,33,63,34,66,62,66,34,66,64,38, 64,65,36,64,35,34,37,33,35,39,35,32,36,63,61,32,36,63,33,32,64,34,36,33,65, 36,39,34,30,65,61,37,64,35,30,61,66,34,64,32,66,38,37,36,30,61,39,64,30,61, 32,36,64,65,66,66,00[HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SQL Server$nameMSSQLServerParameters][HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SQL Server$nameMSSQLServerSuperSocketNetLib]"ProtocolList"=hex(7):74,00,63,00,70,00,00,00,6e,00,70,00,00,00,00,00[HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SQL Server$nameMSSQLServerSuperSocketNetLibNp]"PipeName"="\.pipeMSSQL$$namesqlquery"[HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SQL Server$nameMSSQLServerSuperSocketNetLibTcp]"TcpHideFlag"=dword:00000000"TcpDynamicPorts"="$port""TcpPort"="$port"[HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SQL Server$nameSetup]"FeatureName"="SqlRun""FirstStart"=dword:00000000"ProductCode"="{E09B48B5-E141-427A-AB0C-D3605127224A}""SQLDataRoot"="$path""SQLPath"="$path"这是注册一个Sql Server实例所要使用的注册表,把里面的$name,$path,$port替换成你定义的实例名,当前程序所有路径,监听端口,然后导入注册表就可以了。4. 启动Sql Server iPath:=ExtractFilePath(Application.ExeName); CommandLine:=PChar(iPath+'binnsqlservr.exe -d...datamaster.mdf -l...datamastlog.ldf -e...Loglog.txt+Edit1.Text); CreateProcess( nil, CommandLine, nil, nil, true, CREATE_NO_WINDOW, nil, PChar(iPath+'binn'), StartupInfo, ProcessInformation )也可以直接写个.bat运行就ok了.5. 启动日志问题。 这个问题最简单,因为在执行sqlservr.exe时指定的有log文件,你只用用个定时器(50ms)读文件,就可以在程序中显示出来启动日志了,呵呵,这只是个思想,具体的自已想办法吧. 6. 停止服务 用CreateProcess可以得到进程ID,TerminateProcess就关了sql server进程,服务就停了,简单吧。根据上面的6个步骤,你就可以自已搞定一个绿色的Sql Server了.并且你可以根据不同的sql server版本,整理出所有版本的绿色sql server。绿色 sql server 企业版绿色 sql server 个人版绿色 MSDE... ...这样以后遇到什么操作系统都全部搞定。 最后说一句,只要你能把几个Sql server版本的数据整理好(主要是系统数据库的路径问题(好像现在盒子已经有绿色企业版的文件了),DLL全部copy就OK了),都可以使用我的管理工具进行管理,呵呵,当然你也可以作出自已的管理器。我的管理器,主要是为了我自已用,大家如果用着可以,多提意见。由于sql server数据太大,并且盒子上已经有了,这次只上传了exe和目录结构。不知道说的是否正确,如果还有什么问题,我们一起交流. Email: 11826088@163.com
数据库服务器(全文) 胡经国 本文作者的话 本文是根据有关文献和资料编写的《漫话云计算》系列文稿之一。现作为云计算学习笔 录,奉献给云计算业外读者,作为进一步学习和研究的参考。希望能够得到大家的指教 和喜欢! 下面是正文 一、概述 数据库服务器(Database Server),是指运行数据库系统的专用服务器,其功能就是为数据库系统的高性能运行 提供硬件支持和保障。 运行在局域网中的一台或多台计算机和数据库管理系统软件共同构成数据库服务器。 数据库服务器为客户应用提供数据服务。这些服务包括:查询、更新、事务管理、索引 、高速缓存、查询优化、安全及多用户存取控制等。 二、主要功能 数据库服务器,建立在数据库管理系统基础上,具有数据库管理系统的特性,而且有 其独特性能的—面。其主要功能如下: 1、数据库管理功能,包括:系统配置与管理、数据存取与更新管理、数据完整性管 理和数据安全性管理。 2、数据库的查询和操纵功能,包括:数据库检索和修改。 3、数据库维护功能,包括:数据导入/导出管理,数据库结构维护、数据恢复功能和 性能监测。 4、数据库并行运行。由于在同一时间,访问数据库的用户不止一个,所以数据库服 务器必须支持并行运行机制,处理多个事件的同时发生。 三、层次结构 在C/S(客户机/服务器)模型中,数据库服务器软件(后端)主要用于处理数据查询 或数据操纵的求。与用户交互的应用部分(前端)在用户的工作站上运行。它们的连 接软件是: 1、数据库服务器应用编程接口API; 2、通信连接软件和网络传输协议; 3、公用的数据存取语言SQL。 四、优点 1、编程量减少:数据库服务器提供用于数据操纵的标准接口API(Application Programming Interface,应用程序编程接口)。 2、数据库安全性高(安全保证好):数据库服务器提供监控性能、并发控制等工具 。由DBA(Database Administrator,数据库管理员)统一负责授权访问数据库及网络管理。 3、数据可靠性管理和恢复好:数据库服务器提供统一的数据库备份和恢复、启动和 停止数据库的管理工具。 4、计算机资源利用充分:数据库服务器把数据管理及处理工作,从客户机上分离出 来,使网络中各计算机资源能灵活分配、各尽其用。 5、系统性能提高:能大大降低网络开销;协调操作,减少资源竞争,避免死锁;提 供联机查询优化机制。 6、便于平台扩展:多处理器(相同类型)的水平扩展;多个服务器的水平扩展;垂 直扩展:服务器可以移植到功能更强的计算机上,不涉及处理数据的重新分布问题。 五、数据库服务器与Web服务器分离的好处 1、安全性 数据库服务器可以只对Web服务器提供服务,不至于暴露在互联网中。将网络嗅探、 暴力破解的可能性降到最低。 2、处理效率更高 数据库服务器可以只提供数据检索服务而不必处理其它服务。而且,数据库服务器不 需要外网,只在内网为Web服务器提供数据查询服务即可。Web服务器可以只处理Web求 ,不处理数据库操作,可以更好地利用带宽资源。 链接:网络嗅探 网络嗅探(Network Sniffer),是指利用计算机的网络接口截获目的地为其它计算机的数据报文的一种手段 。 网络嗅探需要用到网络嗅探器,其最早是为网络管理人员配备的工具。有了嗅探器网 ,络管理员可以随时掌握网络的实际情况,查找网络漏洞和检测网络性能。当网络性能 急剧下降的时候,可以通过嗅探器分析网络流量,找出网络阻塞的来源。网络嗅探是网 络监控系统的实现基础。 任何东西都有它的两面性,在黑客的手中,嗅探器就变成了一个黑客利器。 链接:暴力破解 穷举法(Exhaustive Attack method),别称强力法、暴力破解,是指对截获的密文依次用各种可能的密钥破译。 穷举法是一种针对于密码的破译方法。这种方法很像数学上的"完全归纳法"并在密码 破译方面得到了广泛的应用。简单来说就是将密码进行逐个推算直到找出真正的密码为 止。比如一个四位并且全部由数字组成其密码共有10000种组合,也就是说最多我们会尝 试9999次才能找到真正的密码。利用这种方法我们可以运用计算机来进行逐个推算,也 就是说用我们破解任何一个密码也都只是一个时间问题。 六、选型原则及实例解说 1、数据库服务器选型概述 数据库服务器作为业务系统的核心,具有业务量大、存储数据量大等特点。它承担着 业务数据的存储和处理任务。因此,关键数据库服务器的选择就显得尤为重要。服务器 的可靠性和可用性是首要的需求;其次是数据处理能力和安全性;然后是可扩展性和可 管理性。 根据应用类型和规模的不同,数据库对于服务器的性能要求也不一样。例如对于大型 数据库来说,服务器往往仅用来运行数据库,或仅运行单一的应用。数据库的容量在1T B以上,需要有较

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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