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

Mysql dotaz vyhledá řetězec ve všech sloupcích tabulky

Zde je návod, jak zřetězit hodnoty v dynamickém SQL:

set @Pattern = '%augusto%';

select @q := concat('select * from Table1 ',
                   'where concat(', group_concat(column_name), ', "") like "', @Pattern, '"'
                   )
from information_schema.columns c
where table_name = 'Table1';

prepare st from @q;
execute st;

deallocate prepare st;

Dynamický SQL samozřejmě není nijak zvlášť přenosný. Tento nápad by fungoval ve většině databází. Kód by vypadal jinak.

Testováno a funkční zde .

A nakonec to můžete udělat pomocí proměnné substituce (což je lepší přístup):

select @q := concat('select * from Table1 ',
                   'where concat(', group_concat(column_name), ', "") like ?'
                   )
from information_schema.columns c
where table_name = 'Table1';

set @p = '%augusto%';

prepare st from @q;
execute st using @p;

deallocate prepare st;

Také testováno (;-).



  1. Oracle dotaz je pomalý (nebo selže) z aplikace .NET, ale je rychlý z SQL Developer

  2. Přečtěte si Committed Snapshot Isolation

  3. Vraťte řádky, které obsahují alfanumerické znaky v SQLite

  4. Python volání sql-server uložené procedury s tabulkovým parametrem