Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

curinga do MySQL em selecionar


Na verdade. Você pode usar o * coluna curinga para selecionar todas as colunas. Se você estiver unindo várias tabelas, poderá selecionar todas as colunas de uma tabela específica prefixando * com o nome ou alias da tabela:
SELECT a.id, a.title, b.*
  FROM articles AS a
    JOIN blurbs AS b ON a.id = b.article

No entanto, você não deve usar * a menos que você esteja escrevendo um programa de administração de banco de dados.

Como alternativa, você pode criar uma instrução no SQL ou em outra linguagem buscando os metadados da tabela para obter os nomes das colunas. Usando apenas o MySQL, você pode consultar as COLUMNS tabela no INFORMATION_SCHEMA banco de dados para obter os nomes das colunas e usar GROUP_CONCAT para construir a lista de colunas para a instrução.
SELECT CONCAT(
      'SELECT ',
      GROUP_CONCAT(COLUMN_NAME SEPARATOR ', '),
      ' FROM ', :db, '.', :table,
      ' WHERE ...'
      )
  FROM INFORMATION_SCHEMA.COLUMNS
  WHERE TABLE_SCHEMA=:db AND TABLE_NAME=:table

Substitua ":db", ":table" e "..." pelos valores apropriados. Você pode até transformá-lo em uma declaração preparada para poder usá-lo em qualquer tabela. A partir daí, PREPARE e EXECUTE o enunciado construído.

Se você não estiver limitado ao SQL para programação, deve ser menos confuso. O driver de banco de dados para seu idioma de escolha provavelmente oferece métodos para obter metadados. A implementação real seria semelhante à abordagem SQL pura (obter nomes de colunas, montar instrução, preparar, executar), mas não deveria ser tão feia, pois você estaria usando uma linguagem algorítmica, em vez de declarativa.

Eu estaria muito interessado em ver a situação em que isso é realmente necessário ..