Mysql
 sql >> Base de données >  >> RDS >> Mysql

Je n'arrive pas à obtenir cette requête de jointure mysql pour produire le résultat souhaité

Je suis à peu près certain que votre problème est dû à votre GROUP BY clause. Vous ne savez pas quel était votre objectif en l'utilisant, mais essayez sans. Si vous obtenez des lignes en double, essayez d'utiliser SELECT DISTINCT . Si votre objectif était de classer les résultats en fonction de cette colonne, utilisez alors ORDER BY .

Aussi, en spécifiant le receipt_no deux fois dans le WHERE clause est redondante. Ces deux tables sont déjà jointes par cette colonne, il vous suffit donc de la filtrer dans une table. Et les backticks ne sont pas vraiment nécessaires, sauf pour quelques exceptions spéciales, comme des espaces ou des virgules dans le nom de la colonne, ou des colonnes nommées de la même manière que des mots réservés (peut-être aussi quelques autres). La seule colonne de la vôtre qui semble avoir besoin de backticks est la date colonne, mais même en les excluant de cette colonne, tout devrait bien se passer. Je trouve juste que les backticks partout rendent la requête plus longue et plus difficile à lire. Ils ne font rien de mal en étant là, donc vous pouvez les laisser si c'est votre préférence, mais personnellement, je ne suis pas fan.

J'ai réécrit votre requête avec mes modifications mentionnées ci-dessus, et j'ai donné des alias aux tables pour la raccourcir davantage. Cela n'améliore pas les performances ou quoi que ce soit, mais facilite simplement la lecture de l'OMI :

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