我以为我会使用存储的例程来清理一些更复杂的SQL语句。从我读过的内容来看,在sql语句中使用存储过程似乎是不可能的,并且当我需要的是结果集时,存储的函数只返回单个值。我正在使用mySQL v5.0
SELECT p.`id`, gi.`id`
FROM `sport`.`players` AS p JOIN `sport`.`gameinstances` AS gi
ON p.`id` = gi.`playerid`
WHERE (p.`playerid` IN (CALL findPlayers`("Canada", "2002")))
AND (gi.`instanceid` NOT IN (CALL findGameInstances`("Canada", "2002")));
例如,过程'findPlayers'和'findGameInstances'是存储的例程,它们执行一些SQL并返回结果集。我不想直接在上面的语句中包含他们的代码。
答案 0 :(得分:2)
我不知道mysql是否可以使用这些技术中的任何一种,但是在SQl服务器中我会尝试两种不同的东西之一(至少它可能会给你一些在emysql文档中寻找的东西):
首先使用已定义函数的表值然后加入到该值中 其次,将sp的结果集插入临时表,然后加入到tem表
您还可以考虑将复杂逻辑放在视图中,然后在加入视图后添加where子句。如果您的存储过程执行视图无法执行的动态操作,则此操作无效。但这是可能的。