Conjunto vazio ao selecionar dados no banco de dados relacional MySQL
-
19-09-2019 - |
Pergunta
Eu tenho algum banco de dados Relacional MySQL com dezenas de tabelas ... Minha consulta tem 1000 pés de comprimento e seleciona dados de quase todas as tabelas ... Eu também tenho minha tabela 'principal' e todas as outras tabelas estão se referindo a essa. Quando entro uma linha na minha tabela principal e quando crio todas as relações para essa linha em outras tabelas, minha consulta funciona bem. No entanto, se eu entrar em uma linha na tabela principal e em nenhum outro lugar, eu ficarei vazio. Mas eu gostaria de obter pelo menos essas informações no meu resultado. Ou, é claro, todas as informações inseridas em outras tabelas, independentemente do fato de que algumas tabelas não têm informações para esse registro (linha) ...
Obrigado pela ajuda!
Atualizar:
Eu não uso a sintaxe de ingresso e minha consulta parecem:
$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";
Solução
Sua pergunta é muito vaga por enquanto, mas provavelmente é devido ao fato de você usar INNER JOIN
s em vez do LEFT JOIN
s.
Esta consulta:
SELECT *
FROM main
JOIN secondary
ON secondary.main_id = main.id
não retornará nada se secondary
está vazia.
Esta consulta:
SELECT *
FROM main
LEFT JOIN
secondary
ON secondary.main_id = main.id
retornará pelo menos um registro para cada registro em main
, substituindo campos secundários por NULL
s se não houver registros correspondentes em secondary
.
Atualizar:
Implícito JOIN
sintaxe que você usa (enumrando as tabelas e fornecendo o JOIN
condições no WHERE
cláusula) assume INNER JOIN
s.
Assumindo que a
é a tabela "principal", reescreva sua consulta assim:
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