1

非常に単純なテーブルがあるとしましょう:

CREATE TABLE Bands (Name VARCHAR(20) NOT NULL) ENGINE = INNODB;
INSERT INTO Bands VALUES ('Hammerfall'), ('Helloween'), ('Haggard'),
                         ('Therion'), ('Tarja');

そして、クエリを実行します:

SET @i := 0;
SELECT @i := @i + 1 No, Name
FROM Bands
WHERE Name LIKE 'H%'

HeidiSQL と PhyMyAdmin ではうまく動作します:

1 Hammerfall
2 Helloween
3 Haggard

しかし、Delphi 2009 ではエラーで失敗しました

SQL エラー : SQL 構文にエラーがあります。Near 'SELECT @i := @i + 1 No, Name FROM Bands WHERE Name LIKE 'H%' を使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

クエリを TZQuery.SQL ボックス、Query .SQL.Text およびQuery .SQL.Add() に記述します。すべて失敗しました。

そのクエリを実行する方法はありますか?

実際に使用するクエリは、20 列以上のテーブルを結合してレポートを生成することです。しかし、私はこの小さなことを機能させることさえできません~__~

4

1 に答える 1

2

コメンターが述べたように、問題は2つあります。

  1. 1 つの SQL で 2 つのステートメントを実行することはできません (これは SQL インジェクションに対する保護です)。

  2. :の場合は使用できませんTQuery.CheckParams = true

明示的な主キーを持たない InnoDB テーブルを持つことは悪い考えであることに注意してください。
問題は、PK を作成しない場合、MySQL が非表示の PK を作成するため、結合のパフォーマンスが大幅に低下することです。

InnoDB を効率的に実行したい場合は、作成することをお勧めします

integer primary key auto_increment

すべてのテーブルのフィールド。

于 2013-02-27T18:45:25.343 に答える