Mysql
 sql >> Database >  >> RDS >> Mysql

Non riesco a ottenere questa query mysql join per produrre il risultato desiderato

Sono abbastanza certo che il tuo problema sia dovuto al tuo GROUP BY clausola. Non sono sicuro di quale fosse il tuo obiettivo nell'usarlo, ma prova senza di esso. Se ottieni righe duplicate, prova a utilizzare SELECT DISTINCT . Se il tuo obiettivo era ordinare i risultati in base a quella colonna, utilizza ORDER BY .

Inoltre, specificando il receipt_no due volte nel WHERE la clausola è ridondante. Queste due tabelle sono già unite da quella colonna, quindi filtrarle in una tabella è tutto ciò che devi fare. E i backtick non sono realmente necessari ad eccezione di alcune eccezioni speciali, come spazi o virgole nel nome della colonna, o colonne che hanno lo stesso nome delle parole riservate (potrebbero essercene anche alcune altre). L'unica colonna che sembra aver bisogno di backtick è la date colonna, ma anche escludendoli su quella colonna, dovresti comunque andare bene. Trovo solo che i backtick ovunque rendono la query più lunga e difficile da leggere. Non fanno male a nulla essendo lì, quindi puoi lasciarli se è la tua preferenza, ma personalmente non sono un fan.

Ho riscritto la tua query con le mie modifiche sopra menzionate, inoltre ho dato gli alias delle tabelle per abbreviarla ulteriormente. Questo non migliora le prestazioni o altro, semplifica solo la lettura di 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