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

At-Sign in SQL-sætning før kolonnenavn

@ tegn er en variabel i SQL.

I MySQL bruges det til at gemme en værdi mellem på hinanden følgende kørsler af en forespørgsel eller til at overføre data mellem to forskellige forespørgsler.

Et eksempel

Overfør data mellem to forespørgsler

SELECT @biggest:= MAX(field1) FROM atable;
SELECT * FROM bigger_table WHERE field1 > @biggest;

En anden anvendelse er i ranking, som MySQL ikke har indbygget understøttelse for.

Gem en værdi for på hinanden følgende kørsler af en forespørgsel

INSERT INTO table2
  SELECT @rank := @rank + 1, table1.* FROM table1
  JOIN( SELECT @rank := 0 ) AS init
  ORDER BY number_of_users DESC

Bemærk, at for at dette kan fungere, skal rækkefølgen, som rækkerne behandles i i forespørgslen, rettes, det er nemt at tage fejl.

Se:
http://dev.mysql .com/doc/refman/5.0/en/user-variables.html
mysql sorterings- og rangeringserklæring
http:// www.xaprb.com/blog/2006/12/15/advanced-mysql-user-variable-techniques/

OPDATERING
Denne kode vil aldrig fungere.
Du har lige åbnet forbindelsen før, og @felterne er ingen steder sat.
Så i øjeblikket holder de null værdier.
Over det kan du ikke bruge @vars til at angive feltnavne , kan du kun brug @vars til værdier.

$sql1 = "
LOAD DATA LOCAL INFILE 'import.csv'
REPLACE INTO TABLE tablename
FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '\"'
IGNORE 1 LINES
(`normalField`, @field1, @field2, `normalField2`, @field3, @field4)";



  1. Kan jeg parametrisere tabelnavnet i en forberedt erklæring?

  2. SQL SELECT for at få de første N positive heltal

  3. Er FCM (firebase cloud messaging)-token til én enhed eller én konto?

  4. Forespørgsel til ORDER BY antallet af rækker returneret fra en anden SELECT