SQLite:我可以在另一个where语句中包含where语句吗?
我正在使用Arel在RubyonRails中编写SQL查询,我将在SQLite数据库中执行这些语句 因为我的查询是由其他复杂语句组成的,所以我认为可以在另一个where语句中包含where语句 例如:SQLite:我可以在另一个where语句中包含where语句吗?,sql,ruby-on-rails,sqlite,Sql,Ruby On Rails,Sqlite,我正在使用Arel在RubyonRails中编写SQL查询,我将在SQLite数据库中执行这些语句 因为我的查询是由其他复杂语句组成的,所以我认为可以在另一个where语句中包含where语句 例如: SELECT * FROM "patients" INNER JOIN "encounters" INNER JOIN "conditions" WHERE "patients"."patient_characteristic_birthdate" <= '1997-06-30 07:25:
SELECT * FROM "patients" INNER JOIN "encounters" INNER JOIN "conditions" WHERE "patients"."patient_characteristic_birthdate" <= '1997-06-30 07:25:50 UTC' AND "encounters"."length_of_stay" <= 120 AND "encounters"."encounter" = 'Inpatient Encounter' AND (SELECT * FROM "patients" INNER JOIN "conditions" WHERE ("conditions"."diagnosis" = 'cancer' OR "conditions"."diagnosis" = 'obesity')))
数据可以是:
Patients: encounter_id,12345, 12/6/1974, male, latino
Conditions: encounter_id,Obesity, blood presure
Encounter: patient_id,date_start, date_end, 10 days, Encounter inpatient
问题是我接收到的查询是树结构的,所以我必须构造一个嵌套语句。但也许还有另一种更简单的方法
即使我被包含在我正在进行的连接的id字段中,错误也是一样的
ActiveRecord::StatementInvalid (SQLite3::SQLException: only a single result allowed for a SELECT that is part of an expression
这就像我不能在where语句中包含另一个where语句一样
select * from patients p,encounters AS e, CONDITIONS AS C where p.birth_date <='1997-06-30' AND e.lenght_of_stay<'119' and e.encounter='Inpatient Encounter' and c.diagnosis='cancer' OR c.diagnosis='obesity'
desc患者
Name Null Type
------------ ---- ------------
ENCOUNTER_ID VARCHAR2(50)
SSN VARCHAR2(50)
BIRTH_DATE VARCHAR2(50)
GENDER VARCHAR2(50)
RACE VARCHAR2(50)
描述条件
Name Null Type
--------------- ---- ------------
ENCOUNTER_ID VARCHAR2(50)
DIAGNOSIS VARCHAR2(50)
PRIMARY_PROBLEM VARCHAR2(50)
原始查询结构中的问题不在“where”子句中。我觉得这是select语句放错了位置。因为您的查询将转换为以下内容:-
..和Conferences.Conference='住院患者遭遇',并使用select*返回整个表结构!无法使用“where”对其进行分析。其中需要一个类似筛选器的参数=值
我对使用UNION表示怀疑,因为要使用UNION,我们需要在两个选择中使用相同数量的表达式
您可以在另一个“where”中使用“where”,如下示例所示:
select * from patients where ENCOUNTER_ID='1' and BIRTH_DATE IN (select BIRTH_DATE from patients where birth_date <'2001-07-12');
desc患者
Name Null Type
------------ ---- ------------
ENCOUNTER_ID VARCHAR2(50)
SSN VARCHAR2(50)
BIRTH_DATE VARCHAR2(50)
GENDER VARCHAR2(50)
RACE VARCHAR2(50)
描述条件
Name Null Type
--------------- ---- ------------
ENCOUNTER_ID VARCHAR2(50)
DIAGNOSIS VARCHAR2(50)
PRIMARY_PROBLEM VARCHAR2(50)
原始查询结构中的问题不在“where”子句中。我觉得这是select语句放错了位置。因为您的查询将转换为以下内容:-
..和Conferences.Conference='住院患者遭遇',并使用select*返回整个表结构!无法使用“where”对其进行分析。其中需要一个类似筛选器的参数=值
我对使用UNION表示怀疑,因为要使用UNION,我们需要在两个选择中使用相同数量的表达式
您可以在另一个“where”中使用“where”,如下示例所示:
select * from patients where ENCOUNTER_ID='1' and BIRTH_DATE IN (select BIRTH_DATE from patients where birth_date <'2001-07-12');
使用示例数据发布您的表结构没有字段将每个表链接在一起?有通过id链接的字段,是的,我没有在您的第一个SQL查询中包括它,您应该使用UNION连接两个查询的结果。使用示例数据发布表结构没有字段将每个表链接在一起?有通过id链接的字段,是的,我没有将其包括在第一个SQL查询中,您应该使用UNION连接两个查询的结果。