【问题标题】:How to pass dynamic parameters to a MySQL view如何将动态参数传递给 MySQL 视图
【发布时间】:2013-11-25 15:01:30
【问题描述】:

我在 MySQL 中创建了以下视图:

CREATE VIEW MYVIEW AS (
SELECT A.FNAME
     , A.LNAME
     , B.EMAIL
FROM EMPLOYEE A, EMPEMAIL B
WHERE A.EID = :empId
  AND A.EID = B.EID
AND B.EMAILTYP = :emailType)

我必须使empIdemailType 动态化,即在运行时获得empIdemailType 所需值的结果。

代码应该做哪些改动?

提前致谢。

【问题讨论】:

    标签: mysql sql select view mysql-workbench


    【解决方案1】:

    只需创建不带参数的视图(即只处理连接):

    CREATE VIEW MYVIEW AS (
    SELECT A.FNAME
         , A.LNAME
         , B.EMAIL
         , A.EID AS EID             -- added to be used in the WHERE
         , B.EMAILTYP AS EMAILTYP   -- added to be used in the WHERE
    FROM EMPLOYEE A, EMPEMAIL B
    WHERE A.EID = B.EID)
    

    并在查询时应用动态参数:

    SELECT FNAME, LNAME, EMAIL
    FROM   my_view
    WHERE  eid = 'your_empId' AND emailtyp = 'your_emailType'
    

    注意上面显示的WHERE,它使用VIEW 中声明的两个额外字段

    【讨论】:

    • 感谢回复但我不想在结果列中显示 A.EID B.EMAILTYP 的值。我应该做些什么改变???
    • 只需查询您想要的字段 - 我修改了答案以显示这一点。
    • 我只想选择三列 --> A.FNAME, A.LNAME, B.EMAIL
    • 当我们需要执行参数化的 WHERE 子句时,我们需要跳过一些记录,在您的实现中这是可以的,除非有人认为可以获取所有记录,然后在大量数据集上手动执行。参数化视图的问题仍未解决
    • 这里的问题是视图将获取比您想要的更大的数据集。这是我当前的问题,我需要在我的视图或我的性能坦克中使用动态WHERE
    【解决方案2】:

    您可以将此解决方案与函数一起使用 -

    CREATE FUNCTION func() RETURNS int(11)
      RETURN @var;
    
    CREATE VIEW view1 AS
      SELECT * FROM table1 WHERE id = func();
    

    使用示例:

    SET @var = 1;
    SELECT * FROM view1;
    

    【讨论】:

      猜你喜欢
      • 2011-12-09
      • 1970-01-01
      • 2011-06-27
      • 2015-04-25
      • 2015-10-02
      • 1970-01-01
      • 2022-11-23
      • 2018-08-15
      • 2013-06-04
      相关资源
      最近更新 更多