0

今日はばかげた日です。これは比較的単純なことだと思いますが、私の脳は私に答えを与えてくれません。

行がオブジェクトのタイプであるテーブルがあります。次のようになります。

id    name    foo    bar    house_id
1     Cat     12     4      1
2     Cat     9      4      2
3     Dog     8      23     1
4     Bird    9      54     1
5     Bird    78     2      2
6     Bird    29     32     3

これは私がそれを実装することを選択する方法ではありませんが、それは私が取り組んでいるものです。オブジェクト(猫、犬、鳥、実際にはそれらは実際のビジネスのものです)がアドホックベースでテーブルに追加されました。house_id 1に猫が必要な場合は、猫のレコードが入力されます。house_id3が犬を取得すると、犬のレコードが入力されます。

ここで、このテーブルを更新して、すべてのタイプのオブジェクト(Cat、Dog、Bird)が特定のhouse_idのレコードを持つようにする必要があります。これを行うには、各タイプの単一のレコードを返すselectクエリの結果を挿入します。既存のレコードがない場合に限り、そのタイプの行の「foo」と「bar」の最も早い値を使用します。指定されたhouse_idを持つそのタイプの場合。

したがって、上記のサンプルデータの場合、指定されたhouse_id = 3の場合、selectクエリは次を返します。

name    foo    bar    house_id
Cat     12     4      3
Dog     8      23     3

その後、テーブルに直接挿入できます。

基本的に、指定されたhouse_idを持つその名前の行がない場合は、それぞれの個別の名前の最初の行を返します。

提案を歓迎します。それが助けになるなら、DBエンジンはpostgresです。

4

2 に答える 2

0

いつものように、私は午前中ずっと質問に苦労し、それを Stack Overflow に投稿し、次の 30 分以内に自分で解決します

 select name, foo, bar, 3
 from table
 where id in
 (
    select min(id) from table where name not in
    (
       select name from table where house_id = 3
    )
    group by name
 );
于 2012-05-28T15:46:04.517 に答える