0

定義された 2 つのテーブルがあります。

表 1: 患者

| patient_id     | patient_name     |  medications |
------------------------------------------------------
| 1              | Jon Doe          |           1  |
| 2              | Jane Doe         |         2,3  |

表 2: 投薬

|  medication_id | medication_name  |
--------------------------------------
| 1              |           Med 1  |
| 2              |           Med 2  |
| 3              |           Med 3  |

次のSQLでスキーマとデータを作成しました。

create table patient (patient_id INT, patient_name TEXT, medications TEXT);
create table medication (medication_id INT, medication_name TEXT);
INSERT INTO patient VALUES (1, 'Jon Doe', '1');
INSERT INTO patient VALUES (2, 'Jane Doe', '2,3');
INSERT INTO medication VALUES (1, 'Med 1');
INSERT INTO medication VALUES (2, 'Med 2'); 
INSERT INTO medication VALUES (3, 'Med 3');

列の 1 つが薬のコンマ区切りリストである患者をリストするクエリを作成しようとしています。次のクエリを試しました。

SELECT
  patient_id,
  patient_name,
  medications,
  (SELECT group_concat(medication_name) FROM medication T2 WHERE T2.medication_id in (T1.medications)) as med_names
FROM
  patient T1

問題は、2 番目の患者 (Jane Doe) の場合、最初の薬しか受けていないことです。結果:

|  patient_id      | patient_name     | medications      | med_names   |
------------------------------------------------------------------------
|  1               | Jon Doe          | 1                | Med 1       |
|  2               | Jane Doe         | 2,3              | Med 2       |

望ましい結果は次のとおりです。

|  patient_id      | patient_name     | medications      | med_names     |
--------------------------------------------------------------------------
|  1               | Jon Doe          | 1                | Med 1         |
|  2               | Jane Doe         | 2,3              | Med 2, Med 3  |

これは可能ですか?どんな助けでも大歓迎です。ありがとう。

4

1 に答える 1

2

meds フィールドに複数の値を文字列として入れました。その文字列値 ( 2,3) が実際の med テーブルの整数 ID と比較されると、文字列は int に変換されます。つまり

JOIN ... ON '2,3' = x

として解析/実行されます

JOIN ... ON 2 = x

これは不適切なテーブル設計です。1 つのフィールドに複数の値を入力しないでください。正規化された設計が必要です。つまり、レコードpatients_medsがある場所にテーブルを追加する必要があります。patientID, medID

読んでください:http://en.wikipedia.org/wiki/Database_normalization

于 2015-01-14T16:32:32.460 に答える