Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

query does not return all expected rows

Tags:

sql

mysql

SELECT p.INVOICE_PAYMENT_ID,i.INVOICE_ID,i.INVOICE_NUMBER,i.CLINIC_ID,
    i.INVOICE_DATE,i.PAYMENT_RECEIVED_DATE, i.AMOUNT,
    i.CURRENT_CHARGE,i.AMOUNT_RECEIVED,i.MONTH,i.YEAR,i.COMPANY_ID,
    i.COMPANY_NAME,c.NAME,p.NOTE,i.NOTES
FROM test1 i 
LEFT JOIN test2 c ON (i.CLINIC_ID=c.CLINIC_ID)
LEFT JOIN test3 p ON p.INVOICE_ID=i.INVOICE_ID  
WHERE i.MONTH=11 AND i.YEAR=2011                     
    AND  p.INVOICE_PAYMENT_ID IN (
        SELECT MAX(INVOICE_PAYMENT_ID) 
        FROM test3 WHERE INVOICE_ID=i.INVOICE_ID 
    )

If the inner query has no value then it does not return all the corresponding rows in test3.

How do I fix this?

like image 823
isree Avatar asked Jul 27 '26 22:07

isree


1 Answers

Move your inner query from where clause to join condition:

SELECT p.INVOICE_PAYMENT_ID,i.INVOICE_ID,i.INVOICE_NUMBER,i.CLINIC_ID,
    i.INVOICE_DATE,i.PAYMENT_RECEIVED_DATE, i.AMOUNT,
    i.CURRENT_CHARGE,i.AMOUNT_RECEIVED,i.MONTH,i.YEAR,i.COMPANY_ID,
    i.COMPANY_NAME,c.NAME,p.NOTE,i.NOTES
FROM test1 i 
LEFT JOIN test2 c ON (i.CLINIC_ID=c.CLINIC_ID)
LEFT JOIN test3 p ON p.INVOICE_ID=i.INVOICE_ID and p.INVOICE_PAYMENT_ID = (
        SELECT MAX(INVOICE_PAYMENT_ID) 
        FROM test3 WHERE INVOICE_ID=i.INVOICE_ID)
WHERE i.MONTH=11 AND i.YEAR=2011
like image 108
Michał Powaga Avatar answered Jul 29 '26 11:07

Michał Powaga



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!