表a和表b 通过两个查询分别得到以下两组数据
1,select e.code ,e.name from code d,name e where e.id=d.id and e.type="球类"
2,select e.code ,e.name from code d,name e where e.id=d.id and e.type="棋类"
code name
01 足球
02 篮球
03 羽毛球
code name
101 围棋
102 象棋
103 五子棋
表c 学生表 字段如下
学号 姓名 …… 喜欢的球类运动 喜欢的棋类运动
1 张三 01 101
如何关联表a表b查询学生表 并显示的正确球类运动,棋类运动
select codeo,nameo,namea,nameb,namec from
(select e.code codeo ,e.name nameo from code d,name e where e.id=d.id) as o
(select e.code codea,e.name namea from code d,name e where e.id=d.id and e.type="球类1") as a
on o.id=a.id
left join
(select e.code codeb ,e.name nameb from code d,name e where e.id=d.id and e.type="球类2") as b
on o.id=b.id
left join
(select e.code codec ,e.name namec from code d,name e where e.id=d.id and e.type="球类c") as c
on o.id=c.id
不是很明白你说的三个表是指哪三个,看到你的1,2查询里面的coded这个表没有在SELECT中用到,另外name表里面有type字段,觉得你这里其实只需要两个表就可以了
一个是学生表,包含学号,姓名,喜欢的球类运动的code,喜欢的棋类运动的code
一个是运动表,运动的code,运动的type和运动的名称
如果是这样的话,查询如下
SELECT T1.[学号]
, T1.姓名
, T2.Name AS [喜欢的球类运动]
, T3.Name AS [喜欢的棋类运动]
FROM [学生表] T1
LEFT JOIN [运动表] T2 ON T2.type = "球类" AND T2.code = T1.[喜欢的球类运动]
LEFT JOIN [运动表] T3 ON T3.type = "棋类" AND T3.code = T1.[喜欢的棋类运动]
根据你的意思,我猜测e.code可能应该是。d.code,修改了查询,你试一下
SELECT T1.[学号]
, T1.姓名
, T4.Name AS [喜欢的球类运动]
, T5.Name AS [喜欢的棋类运动]
FROM [学生表] T1
LEFT JOIN ([code] T2
INNER JOIN [name] T4 ON T2.id= T4.id AND T2.type = "球类")
ON T2.code = T1.[喜欢的球类运动]
LEFT JOIN ([code] T3
INNER JOIN [name] T5 ON T3.id= T5.id AND T3.type = "棋类")
ON T3.code = T1.[喜欢的棋类运动]