我在 SQL 语句中哪里犯了错误

本文关键字:错误 SQL 语句 我在 | 更新日期: 2023-09-27 18:31:17

我想通过过滤 4 列从数据库中获取数据。第一列名称是Money(金额),第二列名称是Currency。数据库中还有两个具有相同定义的附加列,例如:Money2Currency2

因此,我想获取Money大于 100 且 Currency 为 USD 的所有记录,但另外我想获取Money2大于 200 且Currency2为 EUR 的所有数据。

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

法典:

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

我哪里犯了错误?

我在 SQL 语句中哪里犯了错误

您可能遇到运算符优先级问题。

尝试使用括号强制计算顺序。还可以使用 .0 以避免可能意外转换为 int。

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

之后 FROM 需要是一个表的名称,DB 听起来不像一个表的名称

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

你试过UNION吗?这将允许您独立运行每个查询,并帮助您缩小问题范围。

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

(请注意,UNION中的空格是故意的;没有它,SO不想发布这个答案)