gpt4 book ai didi

MySql-多个where条件

转载 作者:行者123 更新时间:2023-11-29 07:39:16 25 4
gpt4 key购买 nike

您好,首先感谢您的帮助。

我使用 MAX 数据库来进行一些研究。我试图将我的观察限制在特定的诊断上,在同一次就诊中不存在感兴趣的共同感染。

这是我到目前为止所拥有的:

y<-dbGetQuery(conn, "select visit from database 
WHERE diag IN ('diag1', 'diag2')group by visit")
~this yields 100 obs

y2<-dbGetQuery(conn, "select visit from database
WHERE diag IN ('diag1', 'diag2' )
and diag NOT IN ('diag3', 'diag4') group by visit")
~this also yields 100 obs

由于我得到了相同的号码,我很确定这没有按照我想要的方式工作。我是 R 和 MySql 的新手,因此非常感谢任何建议。

我想我应该解释一下,每次就诊可能有多种诊断。也许一个例子可以帮助我更好地解释我的问题:

患者:访问:诊断:
1 诊断1
1 个诊断3
b 2 诊断2
b 2 诊断5
c 3 诊断1

因此,由于我只对分析具有 diag1 或 diag2 而没有诊断出 diag3 或 diag4 的患者感兴趣,因此我在分析中只对患者 B 和 C 感兴趣,而不对患者 a 感兴趣。

最佳答案

问题出在您的 SQL 查询中。查询

select visit from database WHERE diag IN ('diag1', 'diag2') group by visit

相同
select visit from database WHERE diag IN ('diag1', 'diag2' ) and diag NOT IN ('diag3', 'diag4') group by visit

原因是第二个查询中附加条件and diag NOT IN ('diag3', 'diag4')给定两个查询共有的第一个条件,diag IN ('diag1', 'diag2') 必然为真。 。换句话说,如果diag'diag1' 之一和'diag2' ,那么它不能是 'diag3' 之一和'diag4' .

<小时/>

编辑:查看您的示例数据,我想我明白您的需求。您的第二个查询必须重写如下:

select o.visit from database o where o.diag in ('diag1','diag2') group by o.visit
having not exists (select 1 from database where visit=o.visit and diag in ('diag3','diag4'))

having子句基本上类似于 where子句,只不过它是在应用分组(在 group by 子句中定义)之后应用的,因此您可以将每个组作为一个整体进行过滤。在您的情况下,应用 having 之前的查询子句将选择所有访问 1、2 和 3,然后选择 having我写的条件不包括任何也涉及 'diag3' 诊断的就诊或'diag4' ,最终仅排除访问 1。

注意:我假设每个 visit编号对于单个 patient 是唯一的,例如如果patient='a'visit=1 ,那么其他患者就不能有visit=1 ,因为这就是示例数据中的情况,并且这就是您的查询所暗示的内容。如果情况并非如此,则必须将查询(实际上是您的两个查询)重写为按 patient 分组。和visit ,您必须同时选择 patientvisit在您的 select 子句中(以获取明确的结果集数据),以及在第二个查询中的 having子句必须与 patient 相关联以及 visit .

关于MySql-多个where条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29570622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com