[掲示板へもどる]
一括表示

  [No.3048] FAQ「値ラベルの入力が面倒なのですが、なんとかなりませんか?」について 投稿者:nekoandcoro  投稿日:2017/07/13(Thu) 12:28:52

医療分野、Safty Reportの分析にKHCoder3を適用するトライアルを行っている者です。

外部変数の値に対応した「ラベル」を一括で変更したくて先生のFAQを検索しました。

(例)[変数名]の[値(文字列)]を、別の[ラベル(文字列)]に変更したい。

[変数名]     [値]     [ラベル]
発生場所その他  RI室    核医学検査室 


(作成したコード)
## 一時テーブルを作製(この部分は変更しない)
CREATE TABLE temp_labels(

var VARCHAR(255),

val VARCHAR(255),

label VARCHAR(255)
);

## 一時テーブルにラベルを入力(この部分の2行目以下を編集)
INSERT INTO temp_labels (var, val, label) VALUES

( '発生場所その他', 'RI室', '核医学' );

## ラベルデータをKH Coder向けに整形(ここから下も変更しない)
CREATE TABLE outvar_lab_new(

id INT PRIMARY KEY AUTO_INCREMENT,

var_id INT NOT NULL,

val INT NOT NULL,

lab VARCHAR(255)
);

… 以下はFAQに書かれているコードのままです。


上記のコードを「SQL文の実行/SQL Statement」で実行しました。
すると"SQL文にエラーがありました"とエラーが出て処理できません。
Error:
Incorrect integer value: '(化け文字)' for column 'val' at row 2

このエラーは、[値]に整数以外の文字列が入力されているから発生するのですか?
ご教授をお願い致します。


  [No.3049] Re: FAQ「値ラベルの入力が面倒なのですが、なんとかなりませんか?」について 投稿者:HIGUCHI Koichi  投稿日:2017/07/13(Thu) 23:08:51

こんにちは、樋口です。書き込みありがとうございます。

お書きいただいたように、値が整数ではなくて文字列になっていることが原因
のようです。

以下の部分にある「val INT NOT NULL,」を「val VARCHAR(255),」に変更
してみるといかがでしょう?

----------------------------------------------------------------------
## ラベルデータをKH Coder向けに整形(ここから下も変更しない)
CREATE TABLE outvar_lab_new(
id INT PRIMARY KEY AUTO_INCREMENT,
var_id INT NOT NULL,
val INT NOT NULL,
lab VARCHAR(255)
);
----------------------------------------------------------------------


  [No.3050] Re: FAQ「値ラベルの入力が面倒なのですが、なんとかなりませんか?」について 投稿者:nekoandcoro  投稿日:2017/07/14(Fri) 12:05:29

草々にお返事ありがとうございました。

早速試してみました。

手順1:windowsを再起動後、KHcoder v3を起動して[SQL文の実行]で、
ご教授頂いたコード(以下)に修正して[実行]。
--------------------------------------------
CREATE TABLE outvar_lab_new (

id
INT PRIMARY KEY AUTO_INCREMENT,

var_id
INT NOT NULL,

val
VARCHAR(255),

lab
VARCHAR(255)
);
--------------------------------------------


すると、
======================================
Error:
Table 'temp_labels' already exists
======================================
が出現しました。


SQLで「CREATE TABLE」コマンドで作成されるのは一時ファイルで、
jobが完了すると自動で削除されると思っていました。
一時ファイルが残っているなら、それを削除する方法はありますか?


SQLは得意ではありません。勉強不足で申し訳ありません。
ご教授ください。


  [No.3051] Re: FAQ「値ラベルの入力が面倒なのですが、なんとかなりませんか?」について 投稿者:HIGUCHI Koichi  投稿日:2017/07/14(Fri) 14:55:51

こんにちは、樋口です。書き込みありがとうございます。

「CREATE TABLE」で作成したテーブルは、消さない限りずっと残ります。本来、
FAQページのSQLが全部実行されれば消えるはずだったのですが、エラーで途中
で止まったので、消えなかったのですね。

下記のSQLを実行してから、再度お試しいただくといかがでしょう。

---------------------------------------------------------------------
DROP TABLE IF EXISTS temp_labels, outvar_lab_new;
---------------------------------------------------------------------


  [No.3052] Re: FAQ「値ラベルの入力が面倒なのですが、なんとかなりませんか?」について 投稿者:nekoandcoro  投稿日:2017/07/18(Tue) 14:08:11

Re: FAQ「値ラベルの入力が面倒なのですが、なんとかなりませんか?」について (画像サイズ: 486×482 36kB)

お忙しいところありがとうございました。

早速試した結果です。
・SQL文は、テーブル outvar_lab_newを CREATEし、最初の INSERT-WHERE文まで正常に動作しました。
・次の INSERTの FROM LEFT JOIN ON の部分でエラーが出ました(添付画像を参照してください)。


解決の糸口を探るため、SQL文に不慣れでしたのでOracleで文法とにらめっこしてました。
(気が付いたこと)
 ・SELECT * FROM文で関連するテーブルを確認すると、
  テーブル outvar_lab の内容が NULL です。
 
 ・この状況で、ON 条件文のうち
  =============
AND outvar_lab.val = temp_labels.val
=============
   
  の左側が NULL だとSyntaxはエラーにならないのでしょうか?



(参考:実行したSQL全文)
================================================================
CREATE TABLE temp_labels (
var VARCHAR(255),
val VARCHAR(255),
label VARCHAR(255)
);

INSERT INTO temp_labels (var, val, label) VALUES
( '発生場所その他', 'RI室', 'テスト1' );

CREATE TABLE outvar_lab_new (
id INT PRIMARY KEY AUTO_INCREMENT,
var_id INT NOT NULL,
val VARCHAR(255),
lab VARCHAR(255)
);

INSERT INTO outvar_lab_new (var_id, val, lab)
SELECT outvar.id, temp_labels.val, temp_labels.label
FROM outvar, temp_labels
WHERE outvar.name = temp_labels.var;

INSERT INTO outvar_lab_new (var_id, val, lab)
SELECT outvar_lab.var_id, outvar_lab.val, outvar_lab.lab
FROM outvar, outvar_lab
LEFT JOIN temp_labels ON
outvar.name = temp_labels.var
AND outvar_lab.val = temp_labels.val
WHERE
outvar_lab.var_id = outvar.id AND temp_labels.label IS NULL;

DROP TABLE temp_labels;
DROP TABLE outvar_lab;

RENAME TABLE outvar_lab_new TO outvar_lab
================================================================


  [No.3053] Re: FAQ「値ラベルの入力が面倒なのですが、なんとかなりませんか?」について 投稿者:HIGUCHI Koichi  投稿日:2017/07/19(Wed) 01:58:08

こんにちは、樋口です。書き込みありがとうございます。

KH Coder 2の内部で使っていたMySQLに比べて、KH Coder 3のアルファ版では
新しいバージョンのMySQLを使用しております。この新しいMySQLでは機能しな
くなったSQL文が混じっていたために、今回のエラーが生じたようです。申し
訳ありませんでした。

新しいMySQLでも機能するように、FAQページのSQL文を修正しておきました。
http://khc.sourceforge.net/FAQ.html#ov4

お手数をおかけして恐縮ですが、これでお試しいただけますでしょうか。


  [No.3054] Re: FAQ「値ラベルの入力が面倒なのですが、なんとかなりませんか?」について 投稿者:nekoandcoro  投稿日:2017/07/19(Wed) 08:57:08

先生、おはようございます。

 お忙しい中、対応ありがとうございました。

 修正後のコードを拝見しました。
 
--------------------------------
> 新しいMySQLでも機能するように、FAQページのSQL文を修正しておきました。
> http://khc.sourceforge.net/FAQ.html#ov4
--------------------------------

・リンク先のコードについてSQL文を比較させて頂きましたが、
  先生が修正された(削除した)箇所を確認できませんでした。

 (実行結果)FAQのSQL文では、同じエラーがでました。申し訳ありません。
       小職が間違った FAQを見ている可能性もあります。
       よろしくお願い申し上げます。   
 
 
・後学のため、機能しなくなったSQL文をご教授ください。FAQに掲載された
  コードについてはSQLのロジックを少し勉強したので、処理内容が少しわかります。


  [No.3055] Re: FAQ「値ラベルの入力が面倒なのですが、なんとかなりませんか?」について 投稿者:HIGUCHI Koichi  投稿日:2017/07/19(Wed) 12:35:33

こんにちは、樋口です。書き込みありがとうございます。

FAQページを再読み込み(リロード)していただくと、変更された内容が表示
されるのではないかと思いますが、いかがでしょう。

冒頭に「DROP TABLE IF EXISTS temp_labels, outvar_lab_new;」を加えたほか、
「LEFT JOIN」の行ない方を変更しています。「LEFT JOIN」の構文解釈が以前
より厳密になったらしいことに対応しています。


  [No.3056] Re: FAQ「値ラベルの入力が面倒なのですが、なんとかなりませんか?」について 投稿者:nekoandcoro  投稿日:2017/07/20(Thu) 10:26:13

おはようございます。

 早々に対応して頂き感謝申し上げます。

 =========================
FAQをリロードする
=========================
 ・処理が実行されました。ありがとうございました。

  これで、医療セーフティ事例のプロジェクトについて、
  外部変数の値に登録された無秩序な語は、集約・整理したラベルに置き換えることができる
  ようになります。

 ・これで、このスレを終了させて頂きます。ありがとうございました。


 ・今後は、上記の事案テキストを分析し、事案を発生させた業務単位(何がどうした)を見える化
  する方法を探りますので、また別のスレで先生にご教授頂くことになるかと思います。
  よろしくお願い申し上げます。