Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Não consigo fazer com que esta consulta de junção do mysql produza o resultado desejado


Tenho quase certeza de que seu problema é devido ao seu GROUP BY cláusula. Não tenho certeza de qual era seu objetivo ao usar isso, mas tente sem ele. Se você obtiver linhas duplicadas, tente usar SELECT DISTINCT . Se seu objetivo era ordenar os resultados com base nessa coluna, use ORDER BY .

Além disso, especificando o receipt_no duas vezes no WHERE cláusula é redundante. Essas duas tabelas já estão unidas por essa coluna, portanto, filtrá-la em uma tabela é tudo o que você precisa fazer. E os backticks não são realmente necessários, exceto por algumas exceções especiais, como espaços ou vírgulas no nome da coluna, ou colunas com o mesmo nome das palavras reservadas (podem ser algumas outras também). A única coluna sua que parece precisar de acentos graves é a date coluna, mas mesmo excluindo-os nessa coluna, você ainda deve estar bem. Acabei de descobrir que backticks em todos os lugares tornam a consulta mais longa e difícil de ler. Eles não prejudicam nada por estarem lá, então você pode deixá-los se for sua preferência, mas pessoalmente, eu não sou fã.

Reescrevi sua consulta com minhas modificações mencionadas acima, além de fornecer aliases às tabelas para encurtá-la ainda mais. Isso não melhora o desempenho nem nada, apenas facilita a leitura do IMO:
SELECT DISTINCT
    b.receipt_no, client, operator, discount, total_amount,
    amount_paid, balance, `date`, jobtitle, quantity,
    amount, date_paid, old_balance, debtor_amount_paid, new_balance
FROM
    booking b
    INNER JOIN jobtitle jt ON jt.bookingID = b.bookingID
    INNER JOIN first_graphics_debtors fgd ON fgd.receipt_no = b.receipt_no
WHERE
    b.receipt_no = '753263343'
ORDER BY
    jt.quantity