I am trying to append condition to where clause .But the string which contains the condition is not working .I am not getting any error but the condition is not fully applied in the query
Here’s the query.I am passing CLINIC_ID and taleEnd to my stored procedure.taleEnd will include a condition or more like this – “and DOS between ‘2011-09-08’ and ‘2011-10-08′”
SELECT *
FROM A
JOIN B ON C.CLINIC_ID = VP.CLINIC_ID AND C.CLAIM_ID = VP.CLAIM_ID
JOIN C ON P.CLINIC_ID = VP.CLINIC_ID AND P.PATIENT_ID = VP.PATIENT_ID
JOIN D ON I.CLINIC_ID = C.CLINIC_ID AND I.INSURANCE_ID= C.PRIMARY_INSURANCE_ID
JOIN E ON B.CLINIC_ID = I.CLINIC_ID AND B.BUSINESS_ID= I.COMPANY_ID
WHERE (VP.STATUS = 3 OR VP.STATUS = 5)
AND VP.PRIMARY_PAID = 0
AND VP.PRIMARY_PENDING > 0
AND C.PRIMARY_PAYER_ID > 0
AND C.HIDEN = 0
AND VP.CLINIC_ID = CLINIC_ID + taleEnd
The problem is that only clinic_id and not DOS is applied when i run the stored procedure.I tried concat ,set but nothing worked.i didn’t got any error but the result do not applies DOS.Can any one help me please.
@Devart This is the store procedure.
CREATE DEFINER=`root`@`%` PROCEDURE `PRIMARY_INSURANCE_AGING`(CLINIC_ID INT,taleEnd TEXT)
BEGIN
DROP TEMPORARY TABLE IF EXISTS PRIMARY_TEMP;
CREATE TEMPORARY TABLE PRIMARY_TEMP
SELECT *
FROM A
JOIN B ON C.CLINIC_ID = VP.CLINIC_ID AND C.CLAIM_ID = VP.CLAIM_ID
JOIN C ON P.CLINIC_ID = VP.CLINIC_ID AND P.PATIENT_ID = VP.PATIENT_ID
JOIN D ON I.CLINIC_ID = C.CLINIC_ID AND I.INSURANCE_ID= C.PRIMARY_INSURANCE_ID
JOIN E ON B.CLINIC_ID = I.CLINIC_ID AND B.BUSINESS_ID= I.COMPANY_ID
WHERE (VP.STATUS = 3 OR VP.STATUS =5 )
AND VP.PRIMARY_PAID = 0
AND VP.PRIMARY_PENDING > 0
AND C.PRIMARY_PAYER_ID > 0
AND C.HIDEN = 0
AND VP.CLINIC_ID = CLINIC_ID + taleEnd;
END
This is the usage of Prepare statement
SET @A = CONCAT(34847," and DOS between '2011-09-08' and '2011-10-08'");
PREPARE STMT FROM '
SELECT *
FROM A
JOIN B ON C.CLINIC_ID = VP.CLINIC_ID AND C.CLAIM_ID = VP.CLAIM_ID
JOIN C ON P.CLINIC_ID = VP.CLINIC_ID AND P.PATIENT_ID = VP.PATIENT_ID
JOIN D ON I.CLINIC_ID = C.CLINIC_ID AND I.INSURANCE_ID= C.PRIMARY_INSURANCE_ID
JOIN E ON B.CLINIC_ID = I.CLINIC_ID AND B.BUSINESS_ID= I.COMPANY_ID
WHERE (VP.STATUS = 3 OR VP.STATUS = 5)
AND VP.PRIMARY_PAID = 0
AND VP.PRIMARY_PENDING > 0
AND C.PRIMARY_PAYER_ID > 0
AND C.HIDEN = 0
AND VP.CLINIC_ID ? ';
EXECUTE STMT USING @A;
Agree with Dave Rix about the variable and field names, they should be different.
If you want to append additional string (like – and DOS between ‘2011-09-08’ and ‘2011-10-08’) to the query, then you should use a prepared statement.
EDIT:
Example: