2016-01-21 25 views
0

我想通过过滤4列从数据库中获取数据。第一列名称是Money(金额),第二列是Currency。 db中有两个额外的列,例如:Money2Currency2我在SQL语句中犯了什么错误?

所以我想所有的记录,其中Money大于100 Currency是美元,但另外我想获得的所有数据,其中Money2大于200 Currency2是欧元。

我有以下查询,但不幸的是它没有给出第二个查询的结果。

代码:

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

哪里我犯了一个错误?

+3

什么是你的表名,它是数据库? –

+1

所以有一点实验表明,运营商的优先顺序可能不是问题,因为我和其他许多海报人士认为 - 玩下面的查询来看看这个: 选择'不重要'其中(1 = 1和1 = 1或1 = 0和1 = 0) 我们可能需要更多关于数据库/表结构的信息以及底层数据的信息才能更清楚地看到问题。 – 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这个空间是故意的;没有它,不希望张贴此答案)

+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')