以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]查询表SQL语句  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=23283)

--  作者:jspta
--  发布时间:2012/9/7 18:15:00
--  [求助]查询表SQL语句

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目2.rar

有三个表,表1,表2,表3  ,A1、A2为A的子类别,互不相同,依次类推.其中这些数字编号就是主键和外键

举个例子,

在查询前,已知A,B,A1  

需要结果,查找到表3中,[名称编号1]中为A1,且[名称编号2]与B相关编号(形式为Bx)的行,并返回该查询 

目前思路,先在表A找到A,B的对应编号1和2,然后在表B中找到A,B组合后对应编号1,根据这个编号1,在表C中找到相关行,同时根据A1的值,查找到符合的行。并返回这个查询表

希望尽量用一句SQL语句能够解决这个问题。谢谢!

 


图片点击可在新窗口打开查看此主题相关图片如下:1.jpg
图片点击可在新窗口打开查看


图片点击可在新窗口打开查看此主题相关图片如下:2.jpg
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:3.jpg
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:4.jpg
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:5.jpg
图片点击可在新窗口打开查看
[此贴子已经被作者于2012-9-7 22:45:42编辑过]

--  作者:狐狸爸爸
--  发布时间:2012/9/7 21:31:00
--  
看不懂你的问题,帮你顶顶
--  作者:jspta
--  发布时间:2012/9/7 21:42:00
--  

添加了图片,打方框的就是我问题中描述的。最后一张图大方框,就是我想要的结果


--  作者:飞
--  发布时间:2012/9/7 22:13:00
--  
虽然很努力地去看了,但还是没看懂
--  作者:lin_hailun
--  发布时间:2012/9/7 22:45:00
--  
很努力去看了,你的意思是不是,我根据 A B 和 A1 三个值,得到最后一张图的数据?

怎么感觉好绕哦。

select {表C}.编号, {表C}.名称编号1, {表C}.名称编号2, {表C}.表B编号
    from (select * from (select * from {表C} inner join {表B} on {表C}.表B编号 = {表B}.编号) As tb1
        inner join {表A} on tb1.表A编号1 = {表A}.编号) as tb2
                inner join {表A} on tb2.表A编号2 = {表A}.编号
where tb2.名称编号1 = \'A1\' and ({表A}.名称 = \'A\' or {表A}.名称 = \'B\')

--  作者:jspta
--  发布时间:2012/9/7 23:03:00
--  
以下是引用lin_hailun在2012-9-7 22:45:00的发言:
很努力去看了,你的意思是不是,我根据 A B 和 A1 三个值,得到最后一张图的数据?

怎么感觉好绕哦。

select {表C}.编号, {表C}.名称编号1, {表C}.名称编号2, {表C}.表B编号
    from (select * from (select * from {表C} inner join {表B} on {表C}.表B编号 = {表B}.编号) As tb1
        inner join {表A} on tb1.表A编号1 = {表A}.编号) as tb2
                inner join {表A} on tb2.表A编号2 = {表A}.编号
where tb2.名称编号1 = \'A1\' and ({表A}.名称 = \'A\' or {表A}.名称 = \'B\')

就是这个意思,可能我表结构设计的有问题。

我原意是在表1中,任意两个名称(每个名称都有对应的子类N个),组成一组子类别中的1对N关系,

表2的目的是用来描述着这些子类别是由哪两个名称确定的关系。(换句话说,A1和B1的关系不足以描述是属于哪两个名称确定的)

 

好像有点绕。。。。


--  作者:lin_hailun
--  发布时间:2012/9/8 0:55:00
--  
好像下面这样才正确

select {表C}.编号, {表C}.名称编号1, {表C}.名称编号2, {表C}.表B编号
    from (select * from (select * from {表C} inner join {表B} on {表C}.表B编号 = {表B}.编号) As tb1
        inner join {表A} on tb1.表A编号1 = {表A}.编号) as tb2
                inner join {表A} on tb2.表A编号2 = {表A}.编号
where tb2.名称编号1 = \'A1\'
    and ({表A}.名称 = \'A\' or {表A}.名称 = \'B\') and (tb2.名称 = \'A\' or tb2.名称 = \'B\')