2016-10-06 12 views
-1

다른 테이블에서 값을 기준으로보기를 선택 가치를 창출하고, 나는 열을 각 환자에 대한 약물의 집합이 포함되어 patient_iddrug_name와보기를 만들려고하고있는 환자는 알레르기가있을 수 있습니다. 재조사 된 알레르기 표 및 또한 에서 알레르기가 있다고 추정되는 다른 약을 포함하여 표가 있습니다.SQLite는 내가 지금 두 개의 테이블이

CREATE TABLE repostedallergies (
    patient_id CHAR(5), 
    drug_name CHAR(15), 
    PRIMARY KEY (patient_id, drug_name) 
) 
CREATE TABLE inferredallergies (
    alg CHAR(15), 
    canbe_alg CHAR(15), 
    PRIMARY KEY (alg, canbe_alg) 
) 

나는 Serval의 시간을 시도했다, 그러나 그것은보기에 inferredallergie 테이블에서 drug_name을 추가 할 수있는 다른 방법이 있나요

CREATE VIEW allergies AS 
SELECT DISTINCT r.patient_id, r.drug_name 
FROM reportedallergies r, inferredallergies i 
WHERE r.drug_name IN (SELECT canbe_alg 
        FROM inferredallergies i); 

작동하지 않았다. 고맙습니다! FROM 절에

+1

샘플 데이터와 원하는 결과가 실제로 원하는 것을 설명하는 데 도움이됩니다. –

+0

나는 alg와 canbe_alg에 약물의 이름이 들어 있다고 가정하고 있습니까? – Mackers

답변

0
CREATE VIEW allergies AS 
SELECT r.patient_id, r.drug_name 
FROM reportedallergies r 
INNER JOIN inferredallergies i ON r.drug_name = i.canbe_alg 
GROUP BY r.patient_id, r.drug_name 
0

결코 사용 쉼표. 항상은 적절한 명시 적 JOIN 구문을 사용합니다. 항상! 귀하의 경우에는

, 나는 또한 당신이 두 테이블에서 정보를 결합하는 UNION ALL 필요하다고 생각 : 당신은 중복을 제거해야하는 경우

CREATE VIEW allergies AS 
    SELECT r.patient_id, i.canbe_alg as drug_name 
    FROM reportedallergies r JOIN 
     inferredallergies i 
     ON r.drug_name = i.alg 
    UNION ALL 
    SELECT r.patient_id, r.drug_name 
    FROM reportedallergies r; 

는 다음 UNION으로 UNION ALL를 교체합니다.

+0

코드를 사용해 보았지만 제대로 작동하지 않았습니다. canbe_alg는 VIEW에 patient_id를 추가 할 수 없습니다. 또한 많은 중복 데이터를 생성합니다 – ExiaSR

+0

@ExiaSR. . . 중복을 얻는다면 아마도 두 번째 하위 쿼리가 전혀 필요하지 않을 것입니다. 나는 당신의 첫 번째 코멘트를 전혀 이해하지 못합니다. 첫 번째 하위 쿼리에 문제가 있습니까? –