mysql函数返回数据列表

时间:2010-07-06 13:36:06

标签: mysql

我想编写一个以整数作为输入的mysql函数,该函数执行select语句“select table from table_name”然后我希望该函数返回select语句的结果。

然后

在查询中我想做类似的事情:

从table_name中选择id,name,其中id为call function here that returns a list of ids)。

这在mysql中是否有效?

先谢谢

5 个答案:

答案 0 :(得分:1)

是的,您可以在MySql中使用子查询

类似于以下内容

select id,name from table_name1 
               where id in (select DISTINCT(table_name1_id) from table_name2)

答案 1 :(得分:1)

不,你不能在MySQL中执行此操作。

返回结果集的MySQL过程不能在子查询中使用。

如果你的函数只是一些SELECT语句,你可以这样做:

SELECT  id, name
FROM    mytable1
WHERE   id IN
        (
        SELECT  id
        FROM    mytable2
        WHERE   value = @myinteger
        UNION ALL
        SELECT  id
        FROM    mytable2
        WHERE   value = @myinteger
        UNION ALL
        …
        )

或者,效率更高,

SELECT  id, name
FROM    mytable1 t1
WHERE   EXISTS
        (
        SELECT  NULL
        FROM    mytable2 t2
        WHERE   t2.id = t1.id
                AND t2.value = @myinteger
        UNION ALL
        SELECT  NULL
        FROM    mytable3 t2
        WHERE   t3.id = t1.id
                AND t3.value = @myinteger
        UNION ALL
        …
        )

答案 2 :(得分:0)

您不需要函数,可以使用子查询。

E.g。

select id,name from table_name where id in (select someIds from othertable)

答案 3 :(得分:0)

不确定。您可以使用存储过程,UDF甚至子查询。

看看:

  1. MySQL 5.5 Reference Manual - Stored Procedures
  2. MySQL 5.5 Reference Manual - Subqueries
  3. MySQL Stored Procedures: Part 1

答案 4 :(得分:0)

如果你真的需要使用某个功能,你可以:

CREATE FUNCTION my_func (in_id INT(11), value INT(11)) RETURNS INT(11) DETERMINISTIC 
RETURN in_id IN (SELECT id FROM table_name WHERE id = value);

你会用它来称呼它:

SELECT id,name from table_name where myfunc(id, 1);

它通常很慢,因为MySQL无法优化其使用,但可以完成工作。