【问题标题】:Sqlite create view select value based on the value from another tableSqlite 根据另一个表中的值创建视图选择值
【发布时间】:2016-10-06 03:23:42
【问题描述】:

我现在有两个表,我正在尝试创建一个包含 patient_iddrug_name 列的视图,其中包括每个患者的一组药物可以过敏。包括 repostedallergies 表中的药物,以及 inferredallergies 表中推断为过敏的其他药物。

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)
)

我尝试了几次,但没有成功

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);

有没有其他方法可以将来自 inferredallergie 表的 drug_name 添加到视图中。谢谢!

【问题讨论】:

  • 样本数据和期望的结果确实有助于解释您想要做什么。
  • 我假设 alg 和 canbe_alg 包含药物名称?

标签: sql sqlite two-columns create-view


【解决方案1】:
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

【讨论】:

    【解决方案2】:

    永远不要FROM 子句中使用逗号。 总是使用正确的显式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 ALL 替换为UNION

    【讨论】:

    • 我试过你的代码,但没有成功。 canbe_alg 不能添加到 VIEW 中对应的 patient_id。而且还会产生大量重复数据
    • @ExiaSR 。 . .如果您得到重复,那么可能根本不需要第二个子查询。我完全不明白你的第一条评论。第一个子查询有问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-05
    相关资源
    最近更新 更多