Как выбрать несколько таблиц в одном запросе mysql? (в некоторых таблицах еще нет данных) - PullRequest
0 голосов
/ 28 января 2020

У меня есть 3 таблицы с именами patients, customers и deliveries. Эти таблицы находятся в одной базе данных с именем db.

. Все таблицы в равной степени имеют значения id, first_name, last_name, gender, и только таблица deliveries имеет свои собственные данные. (остальные 2 таблицы в настоящее время пусты.)

Теперь я хочу выделить все из них в 1 запросе, но mysql выдает ошибку:

SELECT first_name, last_name , пол ОТ ПАЦИЕНТОВ, КЛИЕНТОВ, ПОСТАВКИ ГРУППА BY people LIMIT 0, 50000 Код ошибки: 1052. Столбец 'first_name' в списке полей неоднозначен 0.047 se c.

Вот как я пытался:

SELECT first_name, last_name, gender
FROM patients, customers, deliveries
GROUP BY people;

Как выбрать все таблицы, даже если в некоторых таблицах нет данных?

1 Ответ

1 голос
/ 28 января 2020

Все таблицы в равной степени имеют идентификатор, имя, фамилию, фамилию, пол и только таблица доставок имеет свои собственные данные. (остальные 2 таблицы в настоящее время пусты.)

Теперь я хочу выбрать все из них в 1 запросе

Я подозреваю, что вы ищете union all:

SELECT first_name, last_name, gender FROM patients
UNION ALL
SELECT first_name, last_name, gender FROM customers 
UNION ALL 
SELECT first_name, last_name, gender FROM deliveries

Это объединит все записи, доступные в 3 таблицах в наборе результатов. С другой стороны, использование (неявного) cross join, как вы, сгенерирует декартово произведение трех таблиц с 9 столбцами (3 * 3) в наборе результатов (то есть, если вы исправите неоднозначность для имен столбцов, которые в настоящее время у вас есть).

Если вы хотите устранить дубликаты по таблицам, вы можете использовать union вместо union all.

Если вы хотите ограничить количество записей в наборе результатов , вы можете сделать это следующим образом:

(
    SELECT first_name, last_name, gender FROM patients
    UNION ALL
    SELECT first_name, last_name, gender FROM customers 
    UNION ALL 
    SELECT first_name, last_name, gender FROM deliveries
)
ORDER BY id
LIMIT 5000

Обратите внимание, что функционально для этого требуется условие order by, в противном случае порядок результатов не определен (я предположил id).

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