Запрос нескольких несвязанных таблиц в SQL - PullRequest
0 голосов
/ 09 мая 2018

У меня есть более 50 таблиц, которые не связаны между собой, но у всех них есть поле «Имя», я хочу запросить «Джон» и получить всех Джонов в разных таблицах и сохранить каждую строку в массиве (Javascript) дляпример:

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

То, что я сейчас делаю, - это цикл for для каждой таблицы:
SELECT * from tablesNameArray[i] WHERE name="John",
, но мне действительно интересно, есть ли что-то еще лучше или "больше""правильный способ сделать это.

Спасибо

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Вы можете сделать это в одном запросе, используя 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 ");
0 голосов
/ 09 мая 2018

Вы можете использовать соединения. См. объединение документов , в данном случае 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 в выбранных столбцах второй таблицы для тех строк, которые не совпадают.

Однако, в зависимости от ваших требований, это, возможно, не очень хорошо - я считаю, что он не будет извлекать строки из таблицы 2 или таблицы 3, где нет соответствующей строки для этого пользователя в таблице 1.

Как указал @ spencer7593 в комментарии ниже, вам, вероятно, следует делать это только в том случае, если вы уверены, что столбец name уникален в каждой таблице, в противном случае вы можете генерировать несколько смехотворно огромных наборов результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...