2016-07-29 10 views
1

私がここに持つのは、薬物と研究の多対多の関係によって引き起こされる4つのテーブル(研究、出版、場所、薬物)と結合テーブルです。ビュー内のSQLサブクエリからの値のリストを返します

私は以下のスクリプトとビュー作成しました:今、私は必要なもの

SELECT 
     `l`.`country` AS `country`, 
     `l`.`latitude` AS `latitude`, 
     `l`.`longitude` AS `longitude`, 
     `l`.`region` AS `region`, 
     `s`.`enrolment` AS `enrolment`, 
     `s`.`diagnosis` AS `diagnosis`, 
     `s`.`registry_ID` AS `registry_ID`, 
     `s`.`status` AS `status`, 
     `s`.`site_name` AS `site_name`, 
     `s`.`study_no` AS `study_no`, 
     `p`.`pub_year` AS `pub_year`, 
     `p`.`URL` AS `url`, 
     `p`.`authors` AS `authors`, 
     `p`.`pubMedId` AS `pubMedId`, 
     `p`.`pub_title` AS `pub_title`, 
     `d`.`name` AS `name` 
    FROM 
     (((`VL`.`Location` `l` 
     join `VL`.`Study` `s`) 
     join `VL`.`Publication` `p`) 
     join `VL`.`Drugs` `d`) 
    WHERE 
     ((`l`.`id` = `s`.`location_id`) 
      and (`p`.`study_id` = `s`.`id`) 
      and `d`.`id` in ((SELECT 
       `VL`.`Study_Drugs`.`drugses_id` 
      FROM 
       `VL`.`Study_Drugs` 
      WHERE 
       (`VL`.`Study_Drugs`.`studiesList_id` = `s`.`id`)))) 

は何が起こるかである、私に各研究で見つけることができる薬の完全なリストを与えるために、サブクエリのためであります私は一人でこのクエリ実行するとき:だから

SELECT d.name 
FROM VL.Drugs d 
WHERE d.id IN(SELECT drugses_id 
      FROM Study_Drugs 
      WHERE studiesList_id = 'whatever id') 

を、質問はなぜそれは私だけでは、クエリの完全なリストを返すんですが、同じクエリでビューのスクリプトの一部として使用されていませんか?サンプルデータを含み、その結果を希望する

EDIT

研究:

'2', 'Spleen', '70', NULL, 'KALA-AZAR MEDICAL RESEARCH CENTER, RAMBAG ROAD , MUZAFFARPUR, BIHAR -842001, INDIA ', 'Published', '75', NULL, '68' 

公開:

場所:

'68', 'India', '26.118589', '85.400719', 'India Subcontinent' 

ドラッグ( )だけでサブクエリを行う場合:

'Pentavalent Antimonial' 
'Miltefosine' 

だから、私は私のビューから欲しいものを調査し、公表から数unnecesaryフィールドを除くすべての情報、だろう。

'India', '26.118589', '85.400719', 'India Subcontinent', '70', 'Spleen', NULL, 'Published', 'KALA-AZAR MEDICAL RESEARCH CENTER, RAMBAG ROAD , MUZAFFARPUR, BIHAR -842001, INDIA ', '75', '2000', 'http://www.ncbi.nlm.nih.gov/pubmed/10897369', 'Sundar S, Gupta LB, Rastogi V, Agrawal G, Murray HW.', '10897369', 'Short-course, cost-effective drugs with amphotericin B-fat emulsion cures visceral leishmaniasis.', 'Pentavalent Antimonial' 

ご覧のとおり、最後の値のみが最初の薬剤により形成されて次のように私は、行ごとに今何を得る研究者のIDに関連するすべてのものを薬で形成された最終値(薬)でありますリスト

+1

Hmmm、 'where'節にはたくさんの結合と条件があります。それらは行を除外する傾向があります。 –

+0

結合条件は、行の重複を避けるためのものです。これは、「研究での位置」と「研究での研究」の参考文献を参照しているためです。薬物のリストには影響しないはずです。 (私は考える:0) – Steven

+0

サンプルデータと期待される結果のサンプルを提供してください。 – HLGEM

答えて

0

の私はあなたのビューでは、私はあなたがのための出版物をしたいのかわからないのです。この

create view your_view 
as 
select s.*, d.* --explicit name that stuff 
from  Location l 
inner join Study s on l.id = s.location_id 
inner join Study_Drugs sd on s.id = sd.study_id 
inner join Drugs d on d.id = sd.drugs_id 
inner join Publications p on s.id = p.study_id; 


select * from your_view where study_id = 1; -- whatever id 

に見えるようにしたいと思います。 使用した「場所」句の代わりに「内部結合」という表記を使用してください。

+0

LOL new? 1992年以来?私は元の構文がひどいことに同意します。しかし、人々はこれが新しい構文ではなく、プログラミングを行っている多くの人々より古くなっていることを理解する必要があります。 – HLGEM

+0

それで、私は "new"の前後に引用符を使用しています。 – Stix

+0

こんにちは、あなたの答えをありがとう、ちょうどあなたのバージョンで試して、私は自分のものとまったく同じ結果セットを取得します。 [パブリケーションとスタディ]のすべてのデータは、ビューからのResultSetとして必要です。このビューはJSONに解析され、データがWebアプリケーションに表示されるようになります。 – Steven

関連する問題