sql >> Database teknologi >  >> RDS >> Mysql

MySQL oprettelsesfunktionen returnerer ikke sæt

En MySQL-funktion returnerer muligvis ikke en række eller et sæt rækker i MySQL. Kun en lagret procedure kan returnere rækker. Dette gælder til og med MySQL 5.4. Se begrænsninger side. Brug af lagrede procedurer som tabeller eller hvor klausulværdier i forespørgsler heller ikke er tilgængelige.

Det bedste du kan gøre, hvis du skal bruge en funktion, er at bruge GROUP_CONCAT til at få værdierne ind i en kommasepareret liste:

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

Så i din select-sætning, der skal kontrollere uid'erne, kan du bruge FIND_IN_SET-funktionen som denne:

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

P.S. Jeg havde oprindeligt lagt links til GROUP_CONCAT- og FIND_IN_SET-funktionerne på MySQL-webstedet, men Stack Overflow ville kun lade mig bruge ét link. Yay for at være ny.




  1. #1055 - Udtryk af SELECT-listen er ikke i GROUP BY-klausul og indeholder ikke-aggregeret kolonne, dette er inkompatibelt med sql_mode=only_full_group_by

  2. Optimizer-begrænsninger med filtrerede indekser

  3. Når en Flask-applikation med Flask-SQLAlchemy kører, hvordan bruger jeg MySQL-klient på den samme database på samme tid?

  4. Returner kun de numeriske værdier fra en PostgreSQL-databasekolonne