Пустой набор при выборе данных в реляционной базе данных MySQL
-
19-09-2019 - |
Вопрос
У меня есть какая -то реляционная база данных MySQL с десятками таблиц ... мой запрос длиной 1000 футов и выбирает данные почти из всех таблиц ... У меня также есть моя «основная» таблица, и все другие таблицы ссылаются на это. Когда я ввожу одну строку в своей основной таблице и когда я создаю все отношения для этой строки в других таблицах, мой запрос работает нормально. Однако, если я введу одну строку в главной таблице, и нигде больше я получаю пустые. Но я хотел бы получить хотя бы эту информацию в моем результате. Или, конечно, вся информация, которая вводится в других таблицах, независимо от того, что в некоторых таблицах нет информации для этой записи (строка) ...
Спасибо за помощь!
Обновлять:
Я не использую синтаксис присоединения, и мой запрос выглядит похоже на это:
$query = "SELECT a.*, b.*, c.*, d.*, e.*, f.*";
$query .= " FROM a, b, c, d, e, f";
$query .= " WHERE a.aID = b.aID";
$query .= " AND b.bID = c.bID";
$query .= " AND b.bID = d.bID";
$query .= " AND b.bID = e.bID";
$query .= " AND b.bID = f.bID";
Решение
Ваш вопрос пока очень расплывчат, но, скорее всего, это связано с тем, что вы используете INNER JOIN
S вместо LEFT JOIN
с
Этот запрос:
SELECT *
FROM main
JOIN secondary
ON secondary.main_id = main.id
ничего не вернет, если secondary
пустой.
Этот запрос:
SELECT *
FROM main
LEFT JOIN
secondary
ON secondary.main_id = main.id
вернется как минимум одна запись для каждой записи в main
, заменяя вторичные поля на NULL
s Если нет соответствующих записей в secondary
.
Обновлять:
Скрытый JOIN
Синтаксис, который вы используете (перечисление таблиц и предоставление JOIN
Условия в WHERE
пункт) предполагает INNER JOIN
с
При условии, что a
это таблица "основной", переписывайте свой запрос как:
SELECT a.*, b.*, c.*, d.*, e.*, f.*
FROM a
LEFT JOIN
b
ON b.aID = a.aID
LEFT JOIN
с
ON c.bID = b.bID
LEFT JOIN
d
ON d.bID = b.bID
LEFT JOIN
e
ON e.bID = b.bID
LEFT JOIN
f
ON f.bID = b.bID