2014-10-20 97 views
0

我在数据库中有20个表。MySQL从多个表中获取结果

我所试图做的就是谁拥有得分所有学生的名单高于70

我的查询:

SELECT mysql.*, mssql.*, orecle.* FROM mysql, mssql, orecle; 

+----------+------------+------------+------------+----------+------------+------------+------------+----------+-------------+-------------+-------------+ 
| student | mysqltest1 | mysqltest2 | mysqltest3 | student | mssqltest1 | mssqltest2 | mssqltest3 | student | orecletest1 | orecletest2 | orecletest3 | 
+----------+------------+------------+------------+----------+------------+------------+------------+----------+-------------+-------------+-------------+ 
| student1 |   60 |   70 |   80 | student1 |   80 |   60 |   70 | student1 |   80 |   60 |   50 | 
| student2 |   50 |   80 |   90 | student1 |   80 |   60 |   70 | student1 |   80 |   60 |   50 | 
| student1 |   60 |   70 |   80 | student2 |   90 |   70 |   50 | student1 |   80 |   60 |   50 | 
| student2 |   50 |   80 |   90 | student2 |   90 |   70 |   50 | student1 |   80 |   60 |   50 | 
| student1 |   60 |   70 |   80 | student1 |   80 |   60 |   70 | student2 |   90 |   70 |   80 | 
| student2 |   50 |   80 |   90 | student1 |   80 |   60 |   70 | student2 |   90 |   70 |   80 | 
| student1 |   60 |   70 |   80 | student2 |   90 |   70 |   50 | student2 |   90 |   70 |   80 | 
| student2 |   50 |   80 |   90 | student2 |   90 |   70 |   50 | student2 |   90 |   70 |   80 | 
+----------+------------+------------+------------+----------+------------+------------+------------+----------+-------------+-------------+-------------+ 
8 rows in set (0.00 sec) 

为什么它显示8行,而不是2?

我希望发生的是当查询运行,只输出有一个值高于70

我厌倦了一对夫妇查询但是似乎没有任何工作,他们都给了我错误的细胞。

SELECT mysql.*, mssql.*, orecle.* FROM mysql, mssql, orecle where ALL > 70; 
SELECT mysql.*, mssql.*, orecle.* FROM mysql, mssql, orecle where ALL > '70'; 
SELECT mysql.*, mssql.*, orecle.* FROM mysql, mssql, orecle where mysql.* OR mssql.* OR orecle.* > 70; 
SELECT mysql.*, mssql.*, orecle.* FROM mysql, mssql, orecle where mysql.* OR mssql.* OR orecle.* > '70'; 

该查询会给我一个行,我认为是更好的

SELECT mysql.*, mssql.*, orecle.* FROM mysql, mssql, orecle where mysql.student='student1' AND mssql.student='student1' AND orecle.student='student1'; 


+----------+------------+------------+------------+----------+------------+------------+------------+----------+-------------+-------------+-------------+ 
| student | mysqltest1 | mysqltest2 | mysqltest3 | student | mssqltest1 | mssqltest2 | mssqltest3 | student | orecletest1 | orecletest2 | orecletest3 | 
+----------+------------+------------+------------+----------+------------+------------+------------+----------+-------------+-------------+-------------+ 
| student1 |   60 |   70 |   80 | student1 |   80 |   60 |   70 | student1 |   80 |   60 |   50 | 
+----------+------------+------------+------------+----------+------------+------------+------------+----------+-------------+-------------+-------------+ 
1 row in set (0.01 sec) 

然而,可以让复杂的〜20桌; 此外,我只想看到值70或更高的结果。

这会发生什么最好的查询?

+0

联盟声明? – fyr 2014-10-20 21:05:25

+1

'JOIN's和'INDEX'es – doublesharp 2014-10-20 21:06:53

回答

4

尝试:

SELECT * FROM mysql INNER JOIN 
mssql USING (student) INNER JOIN 
orecle USING (student); 

为了得到两行,而不是2×2×2 = 8行。

要隐藏细胞得分低于70,请尝试:

SELECT IF(mysqltest1>70,mysqltest1,null) AS M1, 
IF(mysqltest2>70,mysqltest2,null) AS M2, 
IF(mysqltest3>70,mysqltest3,null) AS M3, 
IF(mssqltest1>70,mssqltest1,null) AS S1, 
IF(mssqltest2>70,mssqltest2,null) AS S2, 
IF(mssqltest3>70,mssqltest3,null) AS S3, 
IF(orecletest1>70,orecletest1,NULL) as O1, 
IF(orecletest2>70,orecletest2,NULL) as O2, 
IF(orecletest3>70,orecletest3,NULL) as O3 FROM 
mysql INNER JOIN 
mssql USING (student) INNER JOIN 
orecle USING (student); 

NB:你有在Oracle中的错字。