在SQL中查询多个不相关的表

时间:2018-05-08 21:22:14

标签: javascript mysql sql database sqlite

我有超过50个不相关的表,但它们都有一个“名称”字段,我想查询“John”并在不同的表中获取所有Johns并将每一行存储在一个数组(Javascript)中例如:

arr['table1']="results if any"
arr["table2"]="results if any".

我现在正在做的是每个表的for循环:
 SELECT * from tablesNameArray[i] WHERE name="John",
但我真的很想知道是否还有其他更好或更“正确”的做法。

谢谢

2 个答案:

答案 0 :(得分:2)

您可以使用UNION

在单个查询中执行此操作
SELECT * FROM table1 WHERE name = 'John'
UNION ALL
SELECT * FROM table2 WHERE name = 'John'
UNION ALL
SELECT * FROM table3 WHERE name = 'John'
...

您可以从数组动态构造查询:

sql = tablesNameArray.map(table => `SELECT * FROM ${table} WHERE name = 'John'`).join(" SELECT ALL ");

答案 1 :(得分:0)

您可以使用联接。在这种情况下,请参阅the join docs,MySQL。

这样的事情应该这样做:

SELECT table1.*, table2.*, table3.*
FROM table1
LEFT JOIN table2 ON table1.name = table2.name
LEFT JOIN table3 ON table1.name = table3.name
WHERE table1.name = "John";

即使联接的表格没有匹配的行,左连接仍会从第一个表格中进行选择 - 您将在第二个表格的所选列中获得NULL对于那些没有匹配的行。

但是,根据您的要求,这可能并不好 - 我相信它不会从table2或table3中获取行,而table1中的该用户没有相应的行。

正如@ spencer7593在下面的评论中指出的那样,如果您确定name列在每个表中都是唯一的,那么您应该只执行此操作,否则您可能会生成一些非常庞大的结果集