我正在开发一个基于 mysql 的项目。我需要从多个表中找出数据。我已经搜索并找到了类似的解决方案
SELECT * from table_1, table_2 where (condition)
但这样的解决方案适用于少数表,我的数据库中有大约 57 个表。请让我知道解决方案。
提前致谢。
听起来你想加入你的桌子。例如:
SELECT *
FROM table1
INNER JOIN Table2
ON Table1.table1ID = table2.table1ID
LEFT JOIN Table3
ON Table2.Table2ID = table3.table2ID;
不幸的是,如果您想要来自所有 57 个表的数据,则需要加入所有 57 个表。
您使用的语法 (ANSI 89),虽然它通常会起作用,但最好避免使用(我相信有时 Oracle 会更好地优化这些),ANSI 92 连接不太容易出现用户错误,并且(对大多数人来说)更易读因为 JOIN 条件紧跟在表之后。Aaron Bertrand 写了一篇很好的文章,介绍了使用 ANSI 92 语法而不是 ANSI 89 的原因。
您可以使用 JOIN 子句。
SELECT table_1.name, table_2.salary, table_3.bonus
FROM employee AS table_1
INNER JOIN info AS table_2 ON table_1.name = table_3.name;
INNER JOIN account as table_2 On table_2.salary = table_3.salary
...
...
...
如果每个表的列数相同,则可以使用 UNION 查询:
SELECT * FROM Table1 WHERE (condition)
UNION ALL
SELECT * FROM Table2 WHERE (condition)
UNION ALL
SELECT * FROM Table3 WHERE (condition)
UNION ALL
...