Пустой набор при выборе данных в реляционной базе данных MySQL - PullRequest
0 голосов
/ 10 ноября 2009

У меня есть некоторая реляционная база данных MySQL с десятками таблиц ... Мой запрос имеет длину 1000 футов и выбирает данные почти из всех таблиц ... У меня также есть моя главная таблица, и все другие таблицы ссылаются на это один. Когда я вношу одну строку в основную таблицу и создаю все связи для этой строки в других таблицах, мой запрос работает нормально. Однако, если я введу одну строку в основную таблицу и больше нигде не получу пустой набор. Но я хотел бы получить хотя бы эту информацию в своем результате. Или, конечно, вся информация, которая вводится в другие таблицы, независимо от того, что в некоторых таблицах нет информации для этой записи (строки) ...

Спасибо за помощь!

Обновление:

Я не использую синтаксис JOIN, и мой запрос выглядит примерно так:

$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";

1 Ответ

3 голосов
/ 10 ноября 2009

Ваш вопрос на данный момент очень расплывчатый, но, скорее всего, это связано с тем, что вы используете INNER JOIN s вместо LEFT JOIN s.

Этот запрос:

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 s.

Предполагая, что 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
...