【发布时间】:2015-09-16 12:03:06
【问题描述】:
我在尝试运行的SQL 查询中有一个问题(此时我正在练习)。我正在尝试在 2 个特定日期和一些条件之间获取一些注册表。
问题是,查询无法正常工作,因为它始终只显示相同的注册表,我的意思是,如果有 100 条目,则查询显示 100 次相同的条目。
这是查询:
SELECT Base.Registry.Registry,
Base.Client.Name,
Base.Client.Surname1,
Base.Client.Surname2,
Base.Client.BirthDate,
Base.Registry.Edad,
Base.Client.NIF,
Base.Registry.Procedency,
Base.Registry.DateRegistry,
Base.Registry.DateValidation,
Base.Registry.CodeSample,
Base.SnomedRegistry.Code,
Base.Sample.T
FROM Base.Registry,
Base.Client,
Base.SnomedRegistry,
Base.Sample
WHERE Base.Registry.CodeClient = Base.Client.CodeClient
AND Base.Registry.Registry = Base.SnomedRegistry.Registry
AND Base.Registry.CodeSample = Base.Sample.Sample
AND Base.Registry.DateRegistry BETWEEN '2012-10-26' AND '2012-12-31'
AND Base.SnomedRegistry.Code LIKE 'M8%%%3'
OR Base.SnomedRegistry.Code LIKE 'M8%%%2'
OR Base.SnomedRegistry.Code LIKE 'M8%%%6'
OR Base.SnomedRegistry.Code LIKE 'M8%%%9'
OR Base.SnomedRegistry.Code LIKE 'M9%%%2'
OR Base.SnomedRegistry.Code LIKE 'M9%%%3'
OR Base.SnomedRegistry.Code LIKE 'M9%%%6'
OR Base.SnomedRegistry.Code LIKE 'M9%%%9'
OR Base.SnomedRegistry.Code LIKE 'M69730'
OR Base.SnomedRegistry.Code LIKE 'M60760'
OR Base.SnomedRegistry.Code LIKE 'M74000'
OR Base.SnomedRegistry.Code LIKE 'M74007'
OR Base.SnomedRegistry.Code LIKE 'M74008'
LIMIT 0, 100
我现在对 SQL 非常缺乏经验,所以每一个建议都将不胜感激。
Obs:对不起我的英语。
【问题讨论】:
-
你需要在
where中加上括号来获得你想要的逻辑。但是,您应该修复您的查询以使用正确的显式join语法。简单规则:从不在FROM子句中使用逗号。 -
% 匹配任意数量的字符,甚至是零个字符,因此无需添加
M8%%%2或使用_匹配一个字符,如M8___2跨度>