sql >> Databáze >  >> RDS >> Mysql

Funkce vytvoření MySQL nevrátí sady

Funkce MySQL nemusí vrátit řádek nebo sadu řádků v MySQL. Pouze uložená procedura může vrátit řádky. To platí až do MySQL 5.4 včetně. Viz Omezení strana. Použití uložených procedur jako tabulek nebo tam, kde hodnoty klauzule v dotazech také nejsou dostupné.

Nejlepší, co můžete udělat, pokud potřebujete použít funkci, je použít GROUP_CONCAT k získání hodnot do seznamu odděleného čárkami:

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

Poté ve svém příkazu select, který potřebuje zkontrolovat uid, můžete použít funkci FIND_IN_SET takto:

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

P.S. Původně jsem na webu MySQL zveřejnil odkazy na funkce GROUP_CONCAT a FIND_IN_SET, ale Stack Overflow mi umožnil použít pouze jeden odkaz. Jo, že jsi nový.




  1. Jak přejmenovat sloupec tabulky v Oracle 10g

  2. Symboly, kterých bych si měl být vědom pro SQL injection

  3. MySQL Vytváření tabulek s cizími klíči dává errno:150

  4. Proč nám Oracle SQL neumožňuje používat aliasy sloupců v klauzulích GROUP BY?