Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Ich kann diese MySQL-Join-Abfrage nicht dazu bringen, das gewünschte Ergebnis zu erzielen

Ich bin mir ziemlich sicher, dass Ihr Problem an Ihrem GROUP BY liegt Klausel. Ich bin mir nicht sicher, was Ihr Ziel war, das zu verwenden, aber versuchen Sie es ohne. Wenn Sie doppelte Zeilen erhalten, versuchen Sie es mit SELECT DISTINCT . Wenn Sie die Ergebnisse basierend auf dieser Spalte sortieren wollten, verwenden Sie ORDER BY .

Geben Sie außerdem die receipt_no an zweimal im WHERE Klausel ist überflüssig. Diese beiden Tabellen sind bereits durch diese Spalte verbunden, sodass Sie sie nur in einer Tabelle filtern müssen. Und die Backticks sind nicht wirklich notwendig, abgesehen von einigen besonderen Ausnahmen, wie Leerzeichen oder Kommas im Spaltennamen oder Spalten, die gleich wie reservierte Wörter benannt sind (möglicherweise auch ein paar andere). Die einzige Ihrer Spalten, die so aussieht, als wären Backticks erforderlich, ist das date Spalte, aber selbst wenn Sie sie in dieser Spalte ausschließen, sollte es Ihnen immer noch gut gehen. Ich finde nur, dass Backticks überall die Abfrage länger und schwerer lesbar machen. Sie tun nichts weh, wenn sie da sind, also kannst du sie verlassen, wenn du das bevorzugst, aber ich persönlich bin kein Fan.

Ich habe Ihre Abfrage mit meinen oben erwähnten Änderungen umgeschrieben und den Tabellen Aliase gegeben, um sie weiter zu verkürzen. Dies verbessert nicht die Leistung oder irgendetwas, macht es meiner Meinung nach nur einfacher zu lesen:

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