12

正規化された sqlite データベースでかなり複雑なクエリ (複数の結合) があります。クエリは、SELECT *自動化された属性選択ロジックを有効にするために実行します (したがって、「*」を削除することはできません)。

私が抱えている問題は、結果セットに同じ属性名を持つ複数の列が含まれていることです。たとえば、クエリ内の各テーブルに共通する 1 つの属性は「_id」です。呼び出しに行くと"cursor.getColumnIndex("_id")"、返される値は常に"_id"結果セットの列リストの最後の属性のインデックスです (つまり、必要なものではありません)。SQL エイリアス プレフィックスを次のように使用できるようにしたいのです cursor.getColumnIndex("A._id")が、うまくいきません。

質問

  • cursor.getColumnIndex(AttributeName)最後の「AttributeName」のインデックスを返すようです。誰でもこれを確認できますか?
  • また、「AttributeName」で最初の属性のインデックスを返す方法に関する提案はありますか? 「AttributeName」を持つX番目の属性の方が良いですか?
4

3 に答える 3

8

あなたはこれを行うことができます:

SELECT _id as myID, * FROM myTable

これは、_idフィールドが結果のテーブルごとに 2 回表示されることを意味しますが、2 つの列のうちの 1 つには一意の名前が付けられているため、見つけることができます。

于 2011-11-01T13:34:42.117 に答える
1

残念ながら、ドキュメントには何をする必要があるかについては何も言及されていないため、実行できないと想定しています。

しかし、あなたは言う

クエリは SELECT * を実行して、自動化された属性選択ロジックを有効にします (したがって、「*」を削除することはできません)

あなたが言うこの「自動属性選択ロジック」とは何ですか? なぜこれが必要なのですか?

于 2011-10-31T22:07:50.937 に答える
-3

別の解決策は次のとおりです。

"SELECT tableName.columnName FROM tableName"

そして、次のように同じことを行います:

cursor.getColumnIndex("tableName.columnName");

これが MS-Access の機能です。クエリを作成し、生成された SQL コードを表示できます (単に [表示] メニューに移動し、クエリ デザイン ウィンドウから [SQL ビュー] を選択するだけです)。

于 2013-02-14T02:53:58.670 に答える