2016-01-21 2 views
0

Я хочу получить данные из базы данных, фильтруя 4 столбца. Имя первого столбца - Money (сумма), а второе - Currency. В db есть два дополнительных столбца с одинаковыми определениями: Money2 и Currency2.Где я ошибался в своей инструкции SQL?

Так что я хочу, чтобы получить все записи, где Money больше, чем 100 и Currency составляет USD, но, кроме того, я хочу, чтобы получить все данные, где Money2 больше, чем 200 и Currency2 является евро.

У меня есть следующий запрос, но, к сожалению, он не дает результатов из второго запроса.

Код:

SELECT * 
FROM DB 
WHERE (Money > 100 AND Currency = 'USD' OR Money2 > 200 AND Currency2 = 'EUR') 

Где я допустил ошибку?

+3

Что такое ваше имя таблицы, Является ли это DB? –

+1

Итак, небольшое экспериментирование показывает, что приоритет оператора, скорее всего, не является проблемой, так как я и многие другие плакаты думали со следующим запросом: select 'doesnt matter' где (1 = 1 и 1 = 1 или 1 = 0 и 1 = 0) Мы, вероятно, нуждаемся в дополнительной информации из op о структуре базы данных/таблицы и информации о базовых данных, чтобы увидеть проблему более четко. – Jakotheshadows

+0

Вы пытались разделить два условия ORed на заявление UNION? (У меня запрос с оператором UNION, но при отправке этого комментария SO дает сообщение об ошибке, извините) – WiSeeker

ответ

0

вы пробовали UNION? Это позволит вам запускать каждый запрос самостоятельно и помочь вам сузить проблему.

select * from db where Money > 100 and currency = 'USD' 
UN ION 
select * from db where Money2 > 200 AND Currency2 = 'EUR' 

(Обратите внимание, что пространство в UNION является намеренным, без него SO не хочет отправлять этот ответ)

+0

спасибо за помощь – dave1993

5

Возможно, вы столкнулись с проблемой приоритета оператора.

Попробуйте изменить порядок оценки, используя круглые скобки. Также используйте .0, чтобы избежать возможных непреднамеренных преобразований в int.

SELECT * FROM DB 
WHERE ((Money > 100.0 AND Currency = 'USD') OR (Money2 > 200.0 AND Currency2 = 'EUR')) 
1
SELECT * FROM DB 
WHERE (Money > 100 AND Currency = 'USD') OR (Money2 > 200 AND Currency2 = 'EUR') 
1

После FROM должен быть имя таблицы, DB не звучит как имя таблицы

USE DB 
SELECT * 
FROM --TABLE NAME-- 
WHERE (Money > 100 AND Currency = 'USD') OR (Money2 > 200 AND Currency2 = 'EUR') 
Смежные вопросы