0

基本的に、私は 2 つのテーブルを持っています:imagesservers. imagesテーブルに行を挿入する場合s_id、フィールドの 1 つとして a を指定する必要があります。問題は、テーブルnameの別のフィールドであるしかないことです。に属するserversものを見つけて、それをテーブルのクエリで使用する必要があります。s_idnameINSERT INTOimages

この画像が役立つかもしれません: http://i.imgur.com/rYXbW.png

name私はテーブルのフィールドしか知りません。それを使用してテーブルからフィールドserversを取得する必要があります。それがあれば、それは外部キーであるため、クエリで使用できます。s_idserversINSERT INTO

私はこれを見つけました: http://www.1keydata.com/sql/sqlinsert.html

しかし、それは私をさらに混乱させました。

1 つの解決策は、2 つのクエリを実行することです。1 つは を取得するためのものs_idで、もう 1 つは挿入クエリを実行するためのものです。しかし、合理的な代替手段があれば、実行するクエリの量を制限したいと思います。

ありがとう!

4

3 に答える 3

3

INSERT ... SELECT次のようなフォームを使用できます(もちろん、実際の列名と値を使用して):

INSERT INTO images (s_id, u_id, name, filename, uploaded)
SELECT s_id, ...
FROM servers
WHERE name = 'the name'

u_idnamefilename、またはuploaded列の値をどこで取得しているかはわかりませんが、imagesにリテラル値として含めることができますSELECT

INSERT INTO images (s_id, u_id, name, filename, uploaded)
SELECT s_id, 11, 'pancakes', 'pancakes.jpg', '2011-05-28 11:23:42'
FROM servers
WHERE name = 'the name'

servers.nameが一意でない場合、この種のことは複数の値を挿入します。

于 2011-08-14T01:06:20.713 に答える
0

このようなことができるはずですが、<>の項目に挿入したい値を入力する必要があります。

INSERT INTO images (s_id, u_id, name, filename, uploaded)
   (SELECT s_id, <u_id>, <name>, <filename>, <uploaded>
   FROM imgstore.servers
   WHERE name = @server_name)

これはSQLServerの構文ですが、MySQLでも機能すると思います。

これがINSERT...SELECT構文に関する記事です。

于 2011-08-14T01:08:43.273 に答える
0

潜在的なデータ整合性の問題については、上記の私のコメントを参照してください。サーバーテーブルの名前フィールドには、一意の制約が設定されていると想定しています。

これにアプローチする方法はINSERTいくつかありますが、いくつかは他よりも優れていると確信しています。私は自分のやり方が最善の方法であるとは主張しませんが、うまくいくはずです。このクエリをどのように記述しているかわからないので@FieldValue、変数入力を表すために使用します。私のアプローチは、挿入ステートメントでサブクエリを使用して、必要なデータを取得することです。

INSERT INTO images (field1, field2... s_id) VALUES ('@field1val', '@field2val'... (SELECT s_id FROM servers WHERE name='@nameval'));
于 2011-08-14T01:09:08.250 に答える