1

A、Bの2つのテーブルがあります。Bからすべてのデータを選択する必要があります。これは次のように行うことができます

SELECT id, b1, b2, ... b20 FROM A,B WHERE A.id = B.id; 

それはクールな解決策ではありません。B のデータベースを変更する場合は、このステートメントを更新する必要があります。のような存在はありますか?

SELECT *(B) 

B からすべてのデータを選択し、A からはデータを選択しませんでした。

私のデータベース

A
id
a1
a2
...
a20 

B
id
b1
b2
...
b20
4

4 に答える 4

1

テーブル B からすべてのフィールドを選択することに関するあなたの質問には、他の人が十分に答えていると思います。SQL の基本を本当に理解しているはずなので、それは素晴らしいことです。そうでない場合は、SQLite.orgサイトをチェックして、SQLite が理解できる SQL 構文の説明を確認することもお勧めします。

しかし、あなたが質問に答えたと仮定して、アスタリスク構文の使用について 2 つの注意を喚起したいと思います。

  1. まず、後日、大きな毛むくじゃらの塊 (数メガバイトの画像など) である列を B に追加するとどうなるでしょうか。*(または) 構文を使用B.*して B からすべての列を取得すると、特定の関数には不要な大量の情報が取得される可能性があります。必要がない場合は、SQLite からデータを取得しないでください。

  2. 2 つ目は、結果の列名に基づいて、または問題の列のインデックス番号に基づいて、select ステートメントからデータを取得する Objective C です。後者を行っている*場合、テーブル内の列の物理的な順序が変更されるとコードが壊れる可能性があるため、構文を使用するのは危険です。

名前付き列を使用すると、取得するデータが多すぎるというメモリ/パフォーマンスの問題を解決でき、SQLite のテーブルの物理的な実装から Objective C を分離できます。*一般に、開発者がSQL データベースからデータを取得するときにこの構文を使用することはお勧めしません。おそらく、これは些細なプロジェクトの問題ではありませんが、プロジェクトがより複雑になるにつれて、*構文の影響について慎重に検討する必要がある場合があります。

于 2012-05-28T04:35:33.127 に答える
1

次のクエリを使用します。

SELECT * FROM B;

また

SELECT * FROM B INNER JOIN A ON A.id = B.id;

テーブルAとBを結合したい場合。

于 2012-05-27T18:55:30.563 に答える
1

したがって、データベースを真剣に作成したい場合は、方法の複雑さではなく、効率と速度を確認する必要があります。したがって、私のアドバイスJOINは、2つ以上のテーブルからデータを選択するための最良のソリューションである使用することですinserted select.

あなたが書いた:I need to select all data from BこれはSELECT * FROM B、あなたが書いたという意味ではありません。

あなたへの私のアドバイスはこれを使用しています:

SELECT * FROM A <INNER / LEFT / RIGHT / NATURAL> JOIN B ON A.id = B.id;

または特定の列を選択するには

SELECT A.column1, A.column2, ... FROM A <INNER / LEFT / RIGHT / NATURAL> JOIN B ON A.id = B.id;

ノート:

2 つのテーブルの主キーと外部キーが同じ名前であるため、上記の例では NATURAL JOIN が機能します。したがって、適切に一致する列がない場合に NATURAL JOIN クエリを使用する場合は、十分に注意する必要があります。

したがって、データベースを作成する方法とデータベースを操作する方法、データベースからビューのデータを取得する方法、新しい潜在的なデータをデータベースに挿入する方法などについて考える必要があります。

よろしくね!

于 2012-05-27T19:25:51.977 に答える
0

次のクエリが sqlite で機能するかどうかはわかりません。Oracle でも機能することはわかっていますが、試してみてください...

SELECT B.* FROM A,B WHERE A.id = B.id; 
于 2012-05-27T18:59:52.287 に答える