[英]How do I include results in my dataset when my WHERE clause filters them out?
[英]How do I add conditions in a WHERE SQL clause or return all results if filters are empty
我有一个带有 WHERE 子句的 SQL 语句,如果传递给存储过程 IN 参数的变量是某个值,我将在其中添加其他过滤器。
IN 参数称为 filterID 并且如果我需要所有记录可以为空,或者如果我只想 select 记录在左联接表中的这些列中具有 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 个结果。
谁能发现我做错了什么?
...
AND CASE filterID WHEN 'SEN' THEN tbl_sen.senID IS NOT NULL
WHEN 'EAL' THEN tbl_eal.ealID IS NOT NULL
WHEN 'MAGT' THEN tbl_magt.magtID IS NOT NULL
ELSE filterID IS NULL END
AND ...
据我了解, filterID
是局部变量(SP 参数),因此使用它两次没有问题(而不是查询的绑定参数 - 在这种情况下,您可以使用用户定义的中间变量)。
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) OR
(filterID IS NULL)
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.