【发布时间】:2021-08-09 03:52:15
【问题描述】:
我有一个带有 WHERE 子句的 SQL 语句,如果传递给存储过程 IN 参数的变量是某个值,我将在其中添加其他过滤器。
IN 参数称为 filterID,如果我需要所有记录,则可以为空,如果我只想从 LEFT JOINED 表中选择在这些列中具有 ID 的记录,则其值为 SEN、EAL 或 MAGT。
这是从 SQL 查询中提取的,用于显示表的连接和附加过滤器。
LEFT JOIN tbl_sen ON tbl_pupil.pupilID = tbl_sen.pupilID
LEFT JOIN tbl_eal ON tbl_pupil.pupilID = tbl_eal.pupilID
LEFT JOIN tbl_magt ON tbl_pupil.pupilID = tbl_magt.pupilID
WHERE
tbl_test.schoolID=schoolID
AND (
(filterID='SEN' AND tbl_sen.senID IS NOT NULL) OR
(filterID='EAL' AND tbl_eal.ealID IS NOT NULL) OR
(filterID='MAGT' AND tbl_magt.magtID IS NOT NULL))
AND tbl_test.import=1;
当我使用这些值执行存储过程时,它会显示正确的结果。但是,如果我不想添加过滤器并将 filterID 传递为空/NULL,则当我需要它返回所有结果时,它会返回 0 个结果。
谁能发现我做错了什么?
【问题讨论】:
-
谢谢 Stu,如果这是我需要做的,我在动态 SQL 方面有很多学习要做。
标签: mysql sql stored-procedures