【问题标题】:SQL - Multiple conditions where clause the same columnSQL - 多个条件where子句相同的列
【发布时间】:2017-04-22 19:14:13
【问题描述】:

我有一个看起来有点像这样的数据集

Subject_ID   Diagnosis_ID  
001          299
001          288
001          233
001          299
002          299
002          233
003          238
004          299
004          233

我想创建一个新表,其中包含患有以下疾病的患者 诊断代码 299 和 233。

目前尝试的代码已经

Select *
  From mytable 
 where diagnosis_id = 299 AND diagnosis_id=233

这没用 -

我也试过了

Select *
  From mytable 
 where diagnosis_id = 299 
INTERSECT
Select *
From mytable 
where diagnosis_id= 233

这也没有奏效。

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。
  • 有一件事你没有说清楚。您需要对至少一个患者进行 BOTH 诊断吗?
  • 我认为您可能想要OR 而不是AND。按照同样的逻辑,您可能需要UNION 而不是INTERSECT
  • 顺便说一句,在某些数据库中,您可以使用 INSERT INTO table_with_new_values(field1, field2) SELECT ... 之类的语法直接执行 INSERT
  • 嗨,非常感谢您这么快回复我是的,我需要结果来显示同时存在两个诊断代码的患者 ID :)

标签: sql


【解决方案1】:
select  Subject_ID from (
     Select Distinct Subject_ID, Diagnosis_ID
       From
       Table_1
       Where Diagnosis_ID=299 or Diagnosis_ID=288
)
Group By Subject_ID
Having count(Subject_ID)>=2

【讨论】:

  • 不错,完成了
【解决方案2】:

想想group byhaving

Select patient_id
From mytable
where diagnosis_id in (299, 233)
group by patient_id
having count(*) = 2;

注意:如果您的表格可能有重复,请使用count(distinct diagnosis_id) = 2

【讨论】:

  • 非常感谢您的回复 代码“具有 count(*) = 2 ”是否意味着它只会产生具有两个诊断代码的患者? (这正是我想要/急需的:P)
  • @willepi 。 . .这正是它的作用。
【解决方案3】:

您可以使用 IN()... 。

  SELECT * FROM TABLE
  WHERE diagnosis_id IN(233, 299);

【讨论】:

  • 我知道..!感谢您的评论 BETWEEN 233 AND 299 将显示它们之间的每个 diagnostic_id。
  • 非常感谢您的快速回复 :) 我尝试了 in 语句 - 但这似乎类似于 OR 。我想要的是结果只显示具有两个诊断代码的患者:)
  • 如果您使用 DISTINCT subject_ID 而不是上面代码中的 * .. --> IT 肯定会显示具有两个诊断 ID 的那个..!
  • 结果将是 1,2,4 subject_ID
【解决方案4】:

检查这个:-

Select subject_id 
from
(
Select distinct subject_id, diagnosis_id
from
mytable
where diagnosis_id in ('299','233')
) a
group by subject_id
having count(*)=2

谢谢:-)

【讨论】:

  • 感谢您的帮助 - 我能问一下 where 语句后面的“a”到底是做什么的吗:)
  • @willepi 在 sql 中,从其他表中获取列的子查询就像一个新表。这里的“a”只是给这个表提供了一个别名,它是在内部查询中生成的。简而言之,子查询的别名告诉 sql 将其识别为表。
【解决方案5】:

简单,你可以用这个:

Select *
  From mytable 
 where (diagnosis_id = 299 or diagnosis_id=233)

【讨论】:

    猜你喜欢
    • 2012-04-11
    • 2019-02-09
    • 2012-05-06
    • 2015-09-29
    • 2019-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多