1

プロジェクトでRed Query Builderビジュアル クエリ ビルダーを使用しようとしましたが、SQL 出力がデータベース (SQLite) が期待する SQL と一致していないことがわかりました。SQL のどの方言が生成されているのか、どうすればそれを変更できるのでしょうか?

編集:

たとえば、これは生成された SQL 行です。

"SELECT \"x0\".\"ID\", \"x0\".\"NAME\", \"x0\".\"COUNTRYCODE\", \"x0\".\"DISTRICT\", \"x0\".\"POPULATION\" FROM \"CITY\" \"x0\" INNER JOIN \"COUNTRY\" \"x1\" ON \"x0\".\"COUNTRYCODE\" = \"x1\".\"CODE\" WHERE (\"x1\".\"NAME\" = ?)"

ざっと見てみると、x0 は CITY という名前のテーブルのエイリアスのように見えますが、その接続はどこで行われているのでしょうか?

4

1 に答える 1

1

適切なテーブルを作成した後、クエリは SQLite で問題なく実行されます。完全にエスケープされず、フォーマットされたクエリを次に示します。

SELECT 
    "x0"."ID", 
    "x0"."NAME", 
    "x0"."COUNTRYCODE", 
    "x0"."DISTRICT", 
    "x0"."POPULATION" 
FROM 
    "CITY" "x0" 
            INNER JOIN 
    "COUNTRY" "x1" 
            ON 
        "x0"."COUNTRYCODE" = "x1"."CODE" 
WHERE ("x1"."NAME" = ?)

テストする DDL と挿入は次のとおりです。

CREATE TABLE Country (CODE text, Name Text);
CREATE TABLE CITY (ID int, Name text, countrycode text, district text, population int);

INSERT INTO Country VALUES ('US', 'United States');
INSERT INTO Country VALUES ('AU', 'Australia');

INSERT INTO City VALUES (1, 'Albany', 'US', 'NY', 1000000);
INSERT INTO City VALUES (2, 'Atlanta', 'US', 'GA', 2000000);
INSERT INTO City VALUES (3, 'Washington', 'US', 'DC', 500000);
INSERT INTO City VALUES (4, 'Melborne', 'AU', 'A', 40000);
INSERT INTO City VALUES (5, 'Sydney', 'AU', 'B', 60000);

完全な例 (コンソールで実行されるため、クエリはパラメーター化されませんが?、SQLite のパラメーター化は受け入れられます)。

C:\Windows\System32>sqlite3
SQLite version 3.7.6.3
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> CREATE TABLE Country (CODE text, Name Text);
sqlite> CREATE TABLE CITY (ID int, Name text, countrycode text, district text, population int);
sqlite> INSERT INTO Country VALUES ('US', 'United States');
sqlite> INSERT INTO Country VALUES ('AU', 'Australia');
sqlite> INSERT INTO City VALUES (1, 'Albany', 'US', 'NY', 1000000);
sqlite> INSERT INTO City VALUES (2, 'Atlanta', 'US', 'GA', 2000000);
sqlite> INSERT INTO City VALUES (3, 'Washington', 'US', 'DC', 500000);
sqlite> INSERT INTO City VALUES (4, 'Melborne', 'AU', 'A', 40000);
sqlite> INSERT INTO City VALUES (5, 'Sydney', 'AU', 'B', 60000);
sqlite> SELECT
   ...>         "x0"."ID",
   ...>         "x0"."NAME",
   ...>         "x0"."COUNTRYCODE",
   ...>         "x0"."DISTRICT",
   ...>         "x0"."POPULATION"
   ...> FROM
   ...>         "CITY" "x0"
   ...>                         INNER JOIN
   ...>         "COUNTRY" "x1"
   ...>                         ON
   ...>                 "x0"."COUNTRYCODE" = "x1"."CODE"
   ...> WHERE ("x1"."NAME" = 'United States');
1|Albany|US|NY|1000000
2|Atlanta|US|GA|2000000
3|Washington|US|DC|500000
sqlite>
于 2013-07-04T04:17:54.467 に答える