Как сделать множественный выбор с общим предложением Where в одном запросе?

Как я могу создать один запрос для всех значений из более чем 1 таблицы, где округ равен «baawa». Я использую PHP для подключения к базе данных.

Что я пробовал:

    SELECT (
SELECT * FROM health WHERE county='baawa'
),
(
SELECT * FROM hotspots WHERE county='baawa'
),
(
SELECT * FROM markets WHERE county='baawa'
),
(
SELECT * FROM schools WHERE county='baawa'
),
(
SELECT * FROM security WHERE county='baawa'
)

Изменить: таблицы имеют различное количество столбцов.

Столбцы столбцов:

Здоровье
facility_id,
название,
опека,
место нахождения,
лат,
долгота,
штат сотрудников,
staff_category,
состав,
чрезвычайные ситуации,
conflict_cases,
communication_facility,
мощность


Hotspots
название,
лат,
долгота,
опека,
место нахождения,
mgt_committee,
безопасность,
тип


рынок
market_id,
название,
опека,
место нахождения,
лат,
долгота,
mgt_committee,
безопасность


Школы
Полные тексты,
school_id,
название,
уровень,
опека,
место нахождения,
лат,
долгота,
ученики,
staff_no,
peace_club,
conflict_affected


Безопасность
security_id,
название,
опека,
место нахождения,
лат,
долгота,
штат сотрудников,
состав,
транспорт,
связь,
мощность,
преступления,
Разрешения

0

Решение

Поскольку запросы SQL возвращают двумерные наборы строк, выходные данные должны иметь согласованный набор столбцов. Поэтому невозможно выполнить один запрос к нескольким существенно различным таблицам и создать вывод, включающий все столбцы для всех задействованных таблицсм сноска. Если вы хотите, чтобы все столбцы были доступны, такие как SELECT * будет производить 5 отдельных запросов и извлекать строки по отдельности.

Что можно сделать с вашей существующей структурой:

С вашей существующей структурой, чтобы получить объединенный набор строк всех этих идентичных, вам нужно будет связать их вместе с UNION ALL используя шаблон:

SELECT col1, col2 FROM health WHERE county = 'baawa'
UNION ALL
SELECT col1, col2 FROM hotspots WHERE county = 'baawa'
UNION ALL
SELECT col1, col2 FROM markets WHERE county = 'baawa'
UNION ALL....
SELECT col1, col2 FROM schools WHERE county = 'baawa'
UNION ALL
SELECT col1, col2 FROM security WHERE county = 'baawa'
/* ORDER BY applies to the whole rowset */
ORDER BY col2 DESC, col1 ASC

Уловка в том, что вы можете получить только столбцы, которые общий для всех таблицы с использованием этого метода в упрощенном виде, который я сделал здесь. Просматривая структуры таблиц, я вижу общие столбцы: name, ward, location, lat, lon, Таким образом, вы должны перечислить их в том же порядке в каждом UNION компоненты SELECT,

Обратите внимание, что я делаю не использование SELECT * на UNION запрос. Если только таблицы именно так то же самое, имея столбцы, определенные точно в том же порядке, SELECT * не будет производить столбцы в том же порядке, и ваш вывод не будет иметь смысла, потому что они не выравниваются по UNIONстолы

При выполнении UNION запрос важно четко указать порядок столбцов в SELECT список. В вашем случае это было бы невозможно в любом случае, потому что таблицы значительно различаются.

Если вам нужно включить в результирующий запрос один или два других столбца, которые не являются общими для всех таблиц, вы Можно сделай это в SELECT список, добавив NULL в UNION компоненты, где столбец не существует. Например mgt_committee столбец для 2, где он существует, и NULL где это не так:

/* NULL as mgt_committee where column doesn't exist in table... */
SELECT col1, col2, NULL AS mgt_committee FROM health WHERE county = 'baawa'
UNION ALL
SELECT col1, col2, mgt_committee FROM hotspots WHERE county = 'baawa'
UNION ALL
SELECT col1, col2, mgt_committee FROM markets WHERE county = 'baawa'
UNION ALL
SELECT col1, col2, NULL AS mgt_committee FROM schools WHERE county = 'baawa'
UNION ALL
SELECT col1, col2, NULL AS mgt_committee FROM security WHERE county = 'baawa'

Сноска:

Единственный способ включить все столбцы из всех таблиц в одну SELECT было бы перечислить надмножество всех из них, как я сделал с mgt_committee, имея в виду все столбцы из всех таблиц должны быть представлены в каждый компонент UNION, с NULL замена столбцов, которые не существуют. Не делай этого, это не имеет смысла.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]