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

Carattere jolly MySQL in select

Non proprio. Puoi utilizzare * carattere jolly della colonna per selezionare tutte le colonne. Se stai unendo più tabelle, puoi selezionare tutte le colonne da una tabella specifica anteponendo * con il nome o l'alias della tabella:

SELECT a.id, a.title, b.*
  FROM articles AS a
    JOIN blurbs AS b ON a.id = b.article

Tuttavia, non dovresti usare * a meno che tu non stia scrivendo un programma di amministrazione DB.

In alternativa, puoi creare un'istruzione in SQL o in un altro linguaggio recuperando i metadati della tabella per ottenere i nomi delle colonne. Usando solo MySQL, puoi interrogare COLUMNS tabella nella INFORMATION_SCHEMA database per ottenere i nomi delle colonne e utilizzare GROUP_CONCAT per creare l'elenco di colonne per l'istruzione.

SELECT CONCAT(
      'SELECT ',
      GROUP_CONCAT(COLUMN_NAME SEPARATOR ', '),
      ' FROM ', :db, '.', :table,
      ' WHERE ...'
      )
  FROM INFORMATION_SCHEMA.COLUMNS
  WHERE TABLE_SCHEMA=:db AND TABLE_NAME=:table

Sostituire ":db", ":table" e "..." con i valori appropriati. Puoi persino trasformarlo in una dichiarazione preparata in modo da poterlo utilizzare per qualsiasi tabella. Da lì, PREPARE e EXECUTE l'istruzione costruita.

Se non sei limitato a SQL per la programmazione, dovrebbe essere meno disordinato. Il driver DB per la tua lingua preferita probabilmente offre metodi per ottenere i metadati. L'implementazione effettiva sarebbe simile all'approccio SQL puro (ottenere i nomi delle colonne, assemblare l'istruzione, preparare, eseguire), ma non dovrebbe essere così brutta, poiché useresti un linguaggio algoritmico, piuttosto che dichiarativo.

Sarei molto interessato a vedere la situazione in cui ciò è effettivamente richiesto..