我的任務是重振這一舊版軟件。 它曾經運行在一箇舊的服務器上(2012年),它已經死去了醜陋的方式(硬盤故障)。 在此服務器死亡之前,代碼正常工作。這個查詢應該做什麼? (爲什麼它會失敗?)
我已經從備份中重建了MySQL數據庫和數據。
但是,一個查詢不起作用,並失敗,出現錯誤:Query preparation failed: Unknown column '_operationId' in 'where clause'
。有問題的查詢是:
SELECT
@r AS _operationId
, @r := (
SELECT
operationId
FROM operations
WHERE operationId = _operationId
) AS includesOperationId
FROM (SELECT @r := %i) AS tmp
INNER JOIN operations
WHERE @r > 0 AND @r IS NOT NULL
從我所瞭解的情況來看,查詢試圖重新連接到自己建立某種樹?
由於某種原因,此查詢必須適用於以前版本的MySQL(5.0 ??),但使用當前版本(MySQL 5.7),查詢失敗。
有什麼「MySQL的語者」在那裏誰可以給我解釋一下:
- 什麼查詢試圖做什麼?
- 爲什麼它在一些以前的版本,但不再是?
- 如何更改查詢以使其重新工作?
感謝提前一百萬。
更新:
的operations
表定義和數據:
+-------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------------------+------+-----+---------+----------------+
| operationId | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| operation | varchar(40) | NO | UNI | NULL | |
| description | text | YES | | NULL | |
+-------------+---------------------+------+-----+---------+----------------+
+-------------+-----------+-------------+
| operationId | operation | description |
+-------------+-----------+-------------+
| 1 | add | NULL |
| 2 | delete | NULL |
| 3 | edit | NULL |
| 4 | view | NULL |
| 5 | disable | NULL |
| 6 | execute | NULL |
+-------------+-----------+-------------+
我是一個SQL Server的人,所以可能無法幫助,但是如果您提供一些示例數據,也許是表模式,那對於那些專業的MySQL來說,瞭解到底是怎麼回事。 – 2016-02-26 22:19:16
我懷疑這個查詢是否適用於任何版本,因爲它是。 – Mihai
你的代碼表明'_operationid'也是環境中的一個變量。在同一個查詢中使用會話變量(使用'@'和過程變量)確實很奇怪。 –