2014-12-08 42 views
0

我在網上發現了這個SQL查詢,我確實工作,但我不能解析它。 我沒有使用任何疑問,以「@」或「:=」 如果有一個人能解釋我這是什麼意思,它來自哪個主題下,它會幫助我很多..我不明白這個SQL查詢如何工作和:=運算符

select (select (@) from (select(@:=0x00),(select (@) from (information_schema.columns) where (table_schema>[email protected]) and (@)in (@:=concat(@,0x3C,0x62,0x72,0x3E,' [ ',table_schema,' ] > ',table_name,' > ',column_name))))a)# 
+1

見這樣的問題:HTTP://計算器.COM /問題/ 1009954/MySQL的變量-VS-變什麼最差。 – 2014-12-08 09:13:22

+0

[:=是賦值運算符](http://dev.mysql.com/doc/refman/5.0/zh-cn/assignment-operators.html#operator_assign- value)。 – 2014-12-08 09:13:29

+1

帕特里克剛剛@沒有變量名稱? – 2014-12-08 09:20:33

回答

2

第一所有的我會使查詢更易讀豆蔻位通過格式化來:

1) SELECT (SELECT (@) 
2)   FROM (SELECT (@:=0x00), 
3)      (SELECT (@) 
4)      FROM (information_schema.columns) 
5)      WHERE (table_schema >= @) 
6)      AND (@) IN (@:=CONCAT(@,0x3C,0x62,0x72,0x3E,' [ ',table_schema,' ] > ',table_name,' > ',column_name)) 
7)      ) 
8)    ) 
9)  a); 

@的分配如下:

  1. 在第3行它得到的值0×00(十進制:0)
  2. 在第5行該值被用於大於(TABLE_SCHEMA> = 0)
  3. 第6行到Concat的每個模式,表和列名插入@方式
  4. @在管線1返回的含有

在第6行的附加<br>(爲0x3C,0x62,0x72,0x3E)加到可變您的結構的級聯列表以使輸出更易讀