其實還是看具體條件,查詢出來的臨時表如果能夠滿足動作的要求,是可以的,但如果不能滿足,就不可以,因此你覺得這是不穩定,但應該是不熟悉SQL指令都幹了些什麼的原因。事實上,你也看到我多次說過不是很瞭解SQL語句而避用,除非我測試過某種寫法真是可行的,才會用,否則,我寧願自己寫操作代碼達到目的,畢竟後者是自己可以自由操縱的。
“不穩定”的關鍵,應該是我2樓提到的,條件表達式有時候不是真正的變量表達式。一般命令(指的是諸如SELECT、REPLACE、INSERT、UPDATE等非函數形式的指令)中參數的傳遞,往往是用宏或動態運算,某些參數,看似是變量,但其實經宏替換之後可能是常數。
比如USE TableName,參數本來應該是字符串"TableName",因為就是真的要打開這個表名,但命令形式寫出來,卻似乎是變量,在我們真需要是變量的時候,就必須寫USE &TableName或USE (TableName)。也就是說,像WHERE L1.A3=L2.A3這樣的,我們未必知道到了執行代碼內部,是L2.A3還是不是變量——測試的結果表明確實不是變量,而是當前L2記錄的字段值,可以先把L2的指針移動一下,比如GOTO 2,看看是不是更改了2這條記錄就知道了。有的時候,恰恰怎麼變都不影響結果,那就蒙對了。“不穩定”,應該是這樣來的。
“不穩定”的關鍵,應該是我2樓提到的,條件表達式有時候不是真正的變量表達式。一般命令(指的是諸如SELECT、REPLACE、INSERT、UPDATE等非函數形式的指令)中參數的傳遞,往往是用宏或動態運算,某些參數,看似是變量,但其實經宏替換之後可能是常數。
比如USE TableName,參數本來應該是字符串"TableName",因為就是真的要打開這個表名,但命令形式寫出來,卻似乎是變量,在我們真需要是變量的時候,就必須寫USE &TableName或USE (TableName)。也就是說,像WHERE L1.A3=L2.A3這樣的,我們未必知道到了執行代碼內部,是L2.A3還是不是變量——測試的結果表明確實不是變量,而是當前L2記錄的字段值,可以先把L2的指針移動一下,比如GOTO 2,看看是不是更改了2這條記錄就知道了。有的時候,恰恰怎麼變都不影響結果,那就蒙對了。“不穩定”,應該是這樣來的。
授人以渔,不授人以鱼。