Ajutor - on - sql (dml) cum se afișează toate coloanele cu excepția uneia din interogare fără a le afișa

Cu alte cuvinte, cum să excludem o coloană cu un nume cunoscut din rezultatul unei interogări selectate * din tabel?

De asemenea, trebuie să listați coloanele din instrucțiunea INSERT, excluzând coloanele sau coloanele cu incrementare automată din lista pe care doriți să o atribuiți valorii implicite.







Să presupunem că doriți să selectați toate coloanele din tabelul Laptop, cu excepția coloanei de cod. Pentru a obține toate coloanele mesei, este suficient să scrieți

Dar pentru a exclude codul din coloană din listă. suntem obligați să enumerăm toate celelalte coloane:

Ar fi bine dacă am putea scrie ceva de genul

O astfel de oportunitate ne-ar permite să se evite posibilitatea de corvoada de a face o greșeală atunci când tastați, și ar fi util pentru interogarea dinamică, atunci când nu este cunoscut în prealabil cu privire la orice masă sau numărul de coloane în ea.

Dar, din păcate, nu avem o astfel de oportunitate. Dar putem genera o listă de coloane utilizând un script auxiliar, pentru a putea folosi rezultatele mai târziu în interogări. Putem face acest lucru folosind vizualizarea metadatelor standard, care se numește schema de informații:

Nota predictivă NOT IN utilizată pentru a face posibilă excluderea în viitor a unei singure coloane. Acum trebuie să obținem rezultatul într-un șir de caractere, care este o listă de coloane separate prin virgulă. Pentru aceasta trebuie să folosim mijloace nestandardizate.







SQL Server

În special, pentru SQL Server, putem face acest lucru folosind construcția FOR XML PATH. înlocuind, în trecere, folosind funcția REPLACE, un spațiu între numele coloanelor pentru virgule:

În principiu, putem genera în întregime operatorul necesar, astfel încât acesta să poată fi utilizat dinamic în codul aplicației:

În cazul MySQL, putem folosi funcția agregată specială GROUP_CONCAT:

Trebuie remarcat faptul că informațiile din sistemul MySQL nu se referă la o bază de date separată, și pentru întregul server. Prin urmare, în cazul în care serverul în diferite baze de date au tabele cu același nume, în criteriile de selecție trebuie să adăugați un predicat specificând scheme (baze de date): TABLE_SCHEMA = „calculatoare“.

Concatenarea în MySQL se realizează utilizând funcția CONCAT. Ca rezultat, soluția finală a problemei noastre poate fi scrisă după cum urmează:

PostgreSQL

În PostgreSQL, sarcina reprezentării valorilor coloanelor ca listă de texte poate fi rezolvată utilizând două funcții încorporate: ARRAY și ARRAY_TO_STRING. Prima dintre ele convertește eșantionul într-o serie de valori, iar al doilea convertește matricea într-o listă. În acest caz, al doilea parametru al funcției ARRAY_TO_STRING este un caracter care va fi un separator pentru elementele listate. Acum soluția problemei noastre poate fi scrisă sub forma:

Rețineți că un operator standard de „||“, și notați necesitatea coloanei COLUMN_NAME de date de tip explicit (information_schema.sql_identifier) ​​CHAR tip / VARCHAR pentru concatenarea siruri de caractere în PostgreSQL.


Crack pe parbriz Mitsubishi carisma www.remont-skolov.nethouse.ru
remont-skolov.nethouse.ru







Trimiteți-le prietenilor: