0

table1次のようなテーブルがあります。

ID  | Content
-------------
1   | run2
2   | run3
3   | run1
2   | run2
2   | run2
2   | run1
2   | run2
2   | run1

そして別のテーブルtable2

Content  | ID
----------------
runX     | 1
runX     | 2
runX     | 2
runX     | 3

クエリを実行して、 table1 のContentmost common を使用してtable2 を自動的に更新したいと考えています。クエリの後は以上です。テーブル 2 は次のようになります。ContentID

Content  | ID
----------------
run2     | 1
run2     | 2
run1     | 3

IDマッチ時に table1 を table2 に結合しようとしましたが、設定Contentするmax(Content)と無効と表示されます。これについてどうすればいいですか?

4

1 に答える 1

0

相関サブクエリを使用してこれを行うことができます。

update table2
    set content = (select content
                   from table1 t1
                   where t1.id = table2.id
                   group by content
                   order by count(*) desc
                   limit 1
                  );

ただし、これによって の余分な行がなくなるわけではありませんtable2。これは、追加の手順として行う必要があります。おそらく、代わりに結果を返す単純なクエリで満足するでしょう。

select id,
       (select content
        from table1 t1
        where t1.id = table2.id
        group by content
        order by count(*) desc
        limit 1
       ) as content
from table2;

これを別のテーブルに直接保存することもできます。

編集:

これらが間違った結果を返していることに驚いています。これは正しいことをしていますか?

select id,
       substring_index(group_concat(content order by cnt desc), ',', 1) as MostCommon
from (select id, content, count(*) as cnt desc
      from table1
      group by id
     ) t
group by id;

これが期待する値を生成しない場合、私は質問を誤解しています。

于 2013-07-23T11:08:20.150 に答える