Пустой набор при выборе данных в реляционной базе данных MySQL

StackOverflow https://stackoverflow.com/questions/1709270

Вопрос

У меня есть какая -то реляционная база данных 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 JOINS вместо 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, заменяя вторичные поля на NULLs Если нет соответствующих записей в 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top