【问题标题】:joins in a mysql stored procedure加入一个mysql存储过程
【发布时间】:2015-11-12 19:11:22
【问题描述】:

我是存储过程的新手,我不知道该怎么做 - 我有一组复杂的 mysql 命令,创建临时表、连接等。它们对现有表进行操作,并且有很多可能的集合我可能想要这样做的现有表。作为一个简单的例子,我可能想说“select * from t1 join t2”,但我想要一个接受各种 t1 和 t2 作为参数的过程。显然存储过程不接受表作为参数,所以我想知道这样做的方法是什么。感谢您的帮助。

【问题讨论】:

  • 嗯,这听起来像是您需要准备好的声明,但我不确定您到底想做什么。如果您想向您的过程传递两个表名(t1 和 t2)并在您的选择查询中使用它们,那么可以使用准备好的语句来完成。
  • 这里是小SQL Fiddle,所以你可以在准备好的声明中看到我的意思。这是一个小例子,你只传递一个表名,但它在大规模上几乎相同。但答案实际上取决于您的数据库结构以及该表的关联方式......

标签: mysql stored-procedures


【解决方案1】:

你可以像这样使用准备好的语句:

    set @query = concat("select * from ", table_name_param1,
      " t1 left join ", table_name_param2, " t2 on t1.id = t2.id" );
     prepare s from @query;
     execute s;

【讨论】:

  • H Sasha - 是的,这就是我需要的东西,谢谢。我试过了,它奏效了,唯一的问题是我有 4 个语句。查看“执行”语法,我发现我无法将语句连接成单个语句。除了四次执行之外,你知道有什么方法可以缩短流程吗?
  • 您为每个语句单独准备/执行。如果这不能回答它,请发布一个具体的例子。
  • 嗨,Sasha - 效果很好,我只是想知道是否有更好的方法。非常感谢您的帮助。
  • 基于问题,这就是方法。除非您不同意(我当然不同意),否则请使用上下箭头下方的绿色复选标记标记为已回答。
猜你喜欢
  • 1970-01-01
  • 2011-05-05
  • 2018-08-28
  • 1970-01-01
  • 2013-03-08
  • 2017-06-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多