これが可能かどうかわかりませんが、How to specify the parent query field from within a subquery in mySQL?のアドバイスに従って複数のサブクエリでMySQL SELECT
クエリの値を使用しようとしています。各サブクエリには不均等な数の結果がありますが、私はそれがなぜうまくいかないのだろうと考えています。MySQL - 行数が一致しない複数のサブクエリの結果を使用
私のDBは上記の投稿よりも複雑です。 EC番号*値 - - ユニークなID(substances.id
)
ecs
を持っているすべてが化学物質のリストを
substances
:私は次のようにしている5つのテーブルを扱っています。cas
- CAS番号*の値。ecs_substances
- マッピングsubstances.id
~ecs.id
。cas.id
にsubstances.id
マッピング - 一substances.id
は一つまたは複数のecs.id
cas_substances
にマッピングすることができます。一つsubstances.id
は、これらの化学物質を分類するために使用される用語です* 1、または複数のcas.id
にマッピングすることができます。
データは1つの物質を探すことができる方法の例:複数のCAS番号の割り当ての
substances.id | substances.name
-------------- | ----------------
1 | FooBar
例(同じ原理は、ECのために適用されるが、単に簡潔にするためにCASを使用しています):
cas_substances.id | substance_id
--------------------------------
997 | 1
----------------- | ------------
23423 | 1
--------------------------------
そして、CAS番号自身:
cas.id | cas.value
------ | ---------
997 | ABC-123
------ | ---------
23423 | XYZ-876
------------------
希望の結果は、各substances.id, substances.name
のリストをCAS/EC番号の対応するリストで取得したいと考えています。理想的には改行でフォーマットされています。
substances.id | substances.name | cas_values |
-------------- | --------------- | ------------------ |
1 | FooBar | ABC-123 "\n" XYZ-876
私は次のように論理があることがあることを理解:2から1(substances.id
)から
SELECT * FROM substances
SELECT * FROM cas_substances WHERE cas_substances.substance_id =
結果(S)SELECT cas.value FROM cas WHERE cas.cas.id =
結果(単数または複数) (cas_substances.cas_id
)- フォーマット事実を処理するためには、複数のレコードがある場合もあれば、複数ある場合もあります。
cas_substances
行 - レコード間に改行があります。
を取得するSQLの記述方法がわかりません。1/2の結果です。
これはMySQLでも可能ですか?私が構築しているアプリケーションはPHPで書かれていますが、SQLを使用するとPHPで複数のサブクエリを実行するよりはるかに高速になります(PHPで書ける方がはるかに簡単です)。
チェックGROUP_CONCAT()をし、それがSQL –