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";
Foi útil?

Solução

Sua pergunta é muito vaga por enquanto, mas provavelmente é devido ao fato de você usar INNER JOINs em vez do LEFT JOINs.

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 NULLs 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 JOINs.

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top