代码之家  ›  专栏  ›  技术社区  ›  pagid

mysql create函数不返回集合

  •  1
  • pagid  · 技术社区  · 17 年前

    我无法使用MySQL5.x执行此操作。此函数应返回select语句中的所有相关行:

    CREATE FUNCTION getuids(root INT)
    RETURNS SET OF INT AS $$
    BEGIN
    RETURN SELECT uid FROM pages WHERE deleted = 0
    END
    $$ LANGUAGE 'SQL';
    

    知道我做错了什么吗?

    1 回复  |  直到 16 年前
        1
  •  5
  •   Kasey Speakman    16 年前

    mysql函数不能返回mysql中的一行或一组行。只有存储过程才能返回行。这是对的,包括MySQL5.4。见 Limitations 页。将存储过程用作表或查询中的WHERE子句值也不可用。

    如果需要使用函数,最好使用group_concat将值放入逗号分隔的列表中:

    CREATE FUNCTION getuids() RETURNS VARCHAR(1024)
    BEGIN
    SELECT GROUP_CONCAT(uid SEPARATOR ',') INTO @uid_list FROM pages WHERE deleted = 0;
    RETURN @uid_list;
    END
    

    然后,在需要检查uids的select语句中,可以使用如下的find_in_set函数:

    SELECT ... WHERE FIND_IN_SET(my_field, get_uids());
    

    另外,我最初发布了指向组concat的链接,并在mysql网站上的set函数中找到了,但是堆栈溢出只允许我使用一个链接。你是新来的。