SQLについて質問です。


テーブルに含まれている文字を探して、カウントしたいと考えています。

例えば 2つのテーブルがあり

テーブル1: TEST1

項目: KOUMOKU1


テーブル2: TEST2

項目: KOUMOKU1 KOUMOKU2 KOUMOKU3


例えばテーブル1の KOUMOKU1 に

一行目:りんごは果物である

二行目:りんごは果物で赤色をしている

三行目以降:・・・・・・・

という文字データが入っているとします。

テーブル2の一行目には 

KOUMOKU1に りんご KOUMOKU2に 果物 という文字が入っているのですが

SQL命令を実行すると

KOUMOKU1のりんごとKOUMOKU2の果物が入っている文字列がテーブル1のKOUMOKU1にいくつあるのか?というのをカウントして この場合は テーブル2の一行目のKOUMOKU3に

りんご 果物 2 という数字が入ります。

上記のような命令をDBで行いたいのですがそのような事は可能でしょうか?

回答の条件
  • 1人2回まで
  • 登録:2009/10/02 22:23:32
  • 終了:2009/10/09 22:25:02

回答(1件)

id:komamitsu No.1

komamitsu回答回数21ベストアンサー獲得回数22009/10/02 22:56:33

ポイント60pt

こんなんでどうでしょう。

mysql> select * from test1;
+--------------------------------------------------------------------+
| koumoku1                                                           |
+--------------------------------------------------------------------+
| りんごは果物で赤色をしている                         | 
| りんごは赤色をしている                                  | 
| みかんは果物である                                        | 
| みかんは果物でオレンジ色をしている                | 
| オレンジ色のみかんが売られている                   | 
| オレンジ色のみかんがりんごと共に売られている | 
| りんごは果物である                                        | 
+--------------------------------------------------------------------+
7 rows in set (0.00 sec)

mysql> select * from test2;
+-----------+-----------------+----------+
| koumoku1  | koumoku2        | koumoku3 |
+-----------+-----------------+----------+
| りんご | 果物          |        0 | 
| みかん | オレンジ色 |        0 | 
+-----------+-----------------+----------+
2 rows in set (0.00 sec)

mysql> UPDATE test2 SET koumoku3 = (
    ->   SELECT COUNT(*) FROM test1
    ->   WHERE test1.koumoku1 LIKE CONCAT('%', test2.koumoku1, '%') 
    ->   AND test1.koumoku1 LIKE CONCAT('%', test2.koumoku2, '%')
    -> )
    -> ;
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2  Changed: 2  Warnings: 0

mysql> select * from test2;
+-----------+-----------------+----------+
| koumoku1  | koumoku2        | koumoku3 |
+-----------+-----------------+----------+
| りんご | 果物          |        2 | 
| みかん | オレンジ色 |        3 | 
+-----------+-----------------+----------+
2 rows in set (0.00 sec)
id:aiomock

とても丁寧にご回答ありがとうございます^^。

2009/10/03 00:13:58
  • id:aiomock
    命令文を試してみたのですが 

    (SELECT COUNT(*) FROM test1

    の部分がおかしいというエラーが出てしまいます。

    私のやり方が間違えているからかもしれないのですが SELECT 付近に

    問題などありえますでしょうか?


    UPDATE test2 SET koumoku3 = (

    SELECT COUNT(*) FROM test1

    WHERE test1.koumoku1 LIKE CONCAT('%', test2.koumoku1, '%')

    AND test1.koumoku1 LIKE CONCAT('%', test2.koumoku2, '%')

    )

    ;


    の様にさせていただきました。
  • id:aiomock
    SQLのバージョンですが

    MySQL クライアントのバージョン: 4.1.22

    になります。
  • id:aiomock
    エラーメッセージ内容です。

    実行した SQL: ドキュメント

    UPDATE test2 SET koumoku3 = ( SELECT COUNT( * )
    FROM test1
    WHERE test1.koumoku1 LIKE CONCAT( '%', test2.koumoku1, '%' )
    AND test1.koumoku1 LIKE CONCAT( '%', test2.koumoku2, '%' ) )

    MySQLのメッセージ: ドキュメント
    #1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT COUNT(*) FROM test1
    WHERE test1.koumoku1 LIKE CONCAT('%

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません