sql >> Database >  >> RDS >> Mysql

MySQL-jokerteken in select

Niet echt. U kunt de * gebruiken kolomjokerteken om alle kolommen te selecteren. Als u meerdere tabellen samenvoegt, kunt u alle kolommen van een specifieke tabel selecteren door * . voor te voegen met de tabelnaam of alias:

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

U moet echter geen * . gebruiken tenzij u een DB-beheerprogramma schrijft.

Als alternatief kunt u een instructie maken in SQL of een andere taal door tabelmetagegevens op te halen om de kolomnamen te krijgen. Met alleen MySQL kunt u de COLUMNS tabel in de INFORMATION_SCHEMA database om de kolomnamen op te halen en GROUP_CONCAT om de kolomlijst voor de verklaring op te bouwen.

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

Vervang ":db", ":table" en "..." door de juiste waarden. U kunt er zelfs een voorbereide verklaring van maken, zodat u deze voor elke tabel kunt gebruiken. Van daaruit PREPARE en EXECUTE de geconstrueerde verklaring.

Als je niet beperkt bent tot SQL voor programmeren, zou het minder rommelig moeten zijn. Het DB-stuurprogramma voor uw taal naar keuze biedt waarschijnlijk methoden om metagegevens te verkrijgen. De daadwerkelijke implementatie zou vergelijkbaar zijn met de pure SQL-aanpak (kolomnamen ophalen, instructie samenstellen, voorbereiden, uitvoeren), maar zou niet zo lelijk moeten zijn, omdat u een algoritmische, in plaats van declaratieve, taal zou gebruiken.

Ik zou erg geïnteresseerd zijn in de situatie dat dit echt nodig is..



  1. E-mailqueryresultaten als HTML-tabel in SQL Server (T-SQL)

  2. Hoe records te matchen die zijn gekoppeld aan een specifieke set andere records?

  3. Oproep naar ongedefinieerde functie oci_connect()

  4. Lijst met NLS-parameters in Oracle Database