简体   繁体   English

where子句中的附加条件不起作用

[英]Appending conditions in where clause not working

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 我正在尝试将条件附加到where子句。但是包含条件的字符串不起作用。我没有收到任何错误,但条件未在查询中完全应用

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'" 这是查询。我正在将CLINIC_ID和taleEnd传递给我的存储过程。taleEnd将包含一个或多个类似条件-“以及'2011-09-08'和'2011-10-08'之间的DOS”

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. 问题是当我运行存储过程时仅应用了临床编号而不是DOS。我尝试了concat,set但没有任何效果。我没有任何错误,但结果不适用DOS。任何人都可以帮助我。

@Devart This is the store procedure. @Devart这是存储过程。

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 这是Prepare语句的用法

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;

If you're passing in CLINIC_ID to the stored procedure, and trying to use that within the procedure, I think (without being able to check properly), that there is confusion between the variable CLINIC_ID and the field VP.CLINIC_ID . 如果要将CLINIC_ID传递给存储过程,并尝试在该过程中使用它,我认为(无法正确检查)变量CLINIC_ID与字段VP.CLINIC_ID之间存在混淆。

Try changing the variable name in the procedure to something unique. 尝试将过程中的变量名更改为唯一的名称。

Agree with Dave Rix about the variable and field names, they should be different. 同意Dave Rix的变量和字段名,它们应该不同。

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 . 如果您想在查询中附加其他字符串(例如'2011-09-08'和'2011-10-08'之间的 - 和DOS ),则应使用准备好的语句

EDIT: 编辑:

Example: 例:

SET @query = '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 = ?'; -- ? will be supplied with procedure argument clinic_id_value; where clinic_id_value is a renamed procedure argument

IF taleEnd IS NOT NULL THEN
  @query = CONCAT(@query, ' ', taleEnd);
END IF;

SET @clinic_id_value = clinic_id_value; -- copy procedure argument to the local variable
PREPARE STMT FROM @query;
EXECUTE STMT USING @clinic_id_value;
DEALLOCATE PREPARE STMT;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM