Mysql SQL从2个或更多不同的表中选择1列
我在mysql中有以下表格:Mysql SQL从2个或更多不同的表中选择1列,mysql,sql,Mysql,Sql,我在mysql中有以下表格: students time class_student someone 1 something01 someone 2 something02 someone 3 something03 someone 4 something04 someone 5 something05 theachers time class_teachers someone 1 somethin
students time class_student
someone 1 something01
someone 2 something02
someone 3 something03
someone 4 something04
someone 5 something05
theachers time class_teachers
someone 1 something11
someone 3 something12
someone 5 something13
someone 7 something14
someone 9 something15
someone 11 something16
我需要在两个表中始终从每个表顺序中获取类字段,如下所示
time class_student class_teachers
1 something01 something11
2 something02
3 something03 something12
4 something04
5 something05 something13
7 something14
9 something15
11 something16
首先,我测试这个查询,结果是两个表中的所有时间
SELECT time FROM table1
UNION
SELECT time FROM table2
ORDER BY time
我有一个返回数据的查询,但在同一个字段中
SELECT class_student FROM table1 WHERE time IN (
SELECT time FROM table2
UNION
SELECT time FROM table1
ORDER BY time
)
UNION
SELECT class_teachers FROM table2 WHERE time IN (
SELECT time FROM table2
UNION
SELECT time FROM table1
ORDER BY time
);
我尝试了这个,但是sql没有执行它
SELECT
class_student,
class_teachers
FROM
table1
inner join
table2 on time IN (
SELECT time FROM table1
UNION
SELECT time FROM table2
ORDER BY time
);
试试这个
SELECT CASE WHEN c.time IS NULL THEN a.time ELSE c.time END AS time, c.class_student, a.class_teachers
FROM table1 c
FULL JOIN table2 a ON c.time = a.time
我找到了这个解决方案
SELECT
CASE
WHEN table1.time IS NOT NULL THEN table1.time
WHEN table2.time IS NOT NULL THEN table2.time
WHEN table3.time IS NOT NULL THEN table3.time
END AS time,
table1.valor as table1, table2.valor as table2 , table3.valor as table3
FROM table1
LEFT OUTER JOIN table2 USING (time)
LEFT OUTER JOIN table3 USING (time)
UNION
SELECT
CASE
WHEN table1.time IS NOT NULL THEN table1.time
WHEN table2.time IS NOT NULL THEN table2.time
WHEN table3.time IS NOT NULL THEN table3.time
END AS time,
table1.valor as table1, table2.valor as table2 , table3.valor as table3
FROM table2
LEFT OUTER JOIN table1 USING (time)
LEFT OUTER JOIN table3 USING (time)
UNION
SELECT
CASE
WHEN table1.time IS NOT NULL THEN table1.time
WHEN table2.time IS NOT NULL THEN table2.time
WHEN table3.time IS NOT NULL THEN table3.time
END AS time,
table1.valor as table1, table2.valor as table2 , table3.valor as table3
FROM table3
LEFT OUTER JOIN table1 USING (time)
LEFT OUTER JOIN table2 USING (time)
ORDER BY time;
你的数据库是什么?查看完整的外部连接有了这个,我将使用交叉应用程序获取在一个班级中找到的所有学生;父-子表关系是使用这种联接完成的。如果支持:
从表1中选择时间、班级学生、班级教师a完全联接表2 b ON a.time=b.time
如果不支持:您不需要这种情况,合并(c.time,a.time)作为时间
更好