2016-04-19 25 views
0

我创建下面的代码为应该返回满足两个条件中的记录的查询:嵌套联合查询

1- ID等于#7

2-病等于之一在单引号之间写的疾病

数据库中ID = 7的记录我正在应用此查询,没有将查询中列出的任何疾病作为属性“疾病”的值,所以该查询不应该返回任何记录作为结果。但是它作为查询的结果返回ID = 7的元组。你能告诉我我的代码有什么问题吗?我尝试用(OR)替换(||),但我仍然得到相同的结果。

SELECT * 
FROM patients 
WHERE disease = ('migraine' || 'stroke' || 'concussion' || 'down_syndrome' || 'epilepsy' || 'autism' || 'hydrocephalus' || 'dyslexia' || 'dystonia' || 'aphasia' || 'coma' || 'aneurysm' || 'batten_disease' || 'brain_cancer' || 'alzheimers_disease' || 'amyolrophic_alteral_sclerosis') 
AND ID = '7' 
+0

什么是您的数据库 - MySQL或Oracle?选择一个 - 或者你在两个方面都看到相同的行为?请使用正确的标签。 – mathguy

回答

1

你的意思是使用IN运营商像

SELECT * 
FROM patients 
WHERE disease IN ('migraine', 'stroke' , 'concussion' , 'down_syndrome' , 'epilepsy' , 'autism' , 'hydrocephalus' , 'dyslexia' ,'dystonia' , 'aphasia' , 'coma' ,'aneurysm' , 'batten_disease' , 'brain_cancer' , 'alzheimers_disease' , 'amyolrophic_alteral_sclerosis') 
AND ID = '7'; 

编辑:根据注释:||是连接运算符,而不是一个OR条件,所以最终你得到的所有疾病concatanated字符串而你正在试图比较。

+0

不,请阅读该问题...... OP声明此查询(如书面)不应返回任何行,但它确实如此。他/她想知道为什么。你的建议是合理的,但它并不回答问题。 – mathguy

+1

@mathguy,谢谢指出它,错过了某种方式,但无论如何OP意味着使用'IN'条件,我认为他错误'''与'OR'条件。他发布的查询不应该返回任何事实。 – Rahul

+0

@Rahul,它工作!非常感谢! – Ciba