2015-09-16 2 views
1

У меня есть проблема в моем запросе SQL, который я пытаюсь запустить (я занимаюсь на этом этапе). Я пытаюсь получить некоторые реестры между двумя конкретными датами и некоторыми условностями.SQL не работает должным образом

Дело в том, что запрос не работает должным образом, поскольку он показывает только один и тот же реестр все время, я имею в виду, если есть 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, поэтому каждый совет будет иметь в виду.

Обс: Извините за мой английский.

+2

Вы должны круглые скобки в 'where', чтобы получить логику вы хотите. Однако вы должны исправить свой запрос, чтобы использовать правильный явный синтаксис 'join'. Простое правило: * Никогда * не используйте запятые в предложении 'FROM'. –

+2

**% соответствует любому количеству символов, даже нулевым символам **, поэтому не нужно добавлять как 'M8 %%% 2' или использовать' _', который соответствует точно одному символу, например 'M8 ___ 2' – lad2025

ответ

2

Я хотел бы прокомментировать, а не дать ответ, но мне нужно 50 очков, чтобы сделать это. lol

Я не совсем уверен, почему вам нужно использовать% столько раз, сколько %%%%%, как обычно одного%.

Я бы сказал, что ваша проблема связана с вашим заявлением и в идеале должна использовать соединения.

Я хотел бы также использовать скобки вокруг как заявления ...

WHERE 1 = 1 
    AND 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 
2

Вы забыли скобку:

SELECT ... 
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 ( #<----- here 
    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' 
) #<----- here 
LIMIT 0 , 100 
+0

ah, страшная AND OR комбинация – Drew

0

с использованием join и скобку:

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 
inner join Base.Client on Base.Registry.CodeClient = Base.Client.CodeClient 
inner join Base.SnomedRegistry on Base.Registry.Registry = Base.SnomedRegistry.Registry 
inner join Base.Sample on Base.Registry.CodeSample = Base.Sample.Sample 
WHERE 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 
Смежные вопросы