SQL上的数据滑动查询



我不明白某些帐户是如何通过如下所示的查询的;我做错什么了吗?我正在努力确保只有投资组合1-3的债券和掉期能够通过。

SELECT DISTINCT portfolio
FROM holdings_table
WHERE as_of_date = '2022-01-01'
AND asset_class = 'bond' OR asset_class = 'swap'
AND portfolio = 'PORT1' OR portfolio = 'PORT2' OR portfolio = 'PORT3'
portfolio
PORT1
PORT2
PORT3
PORT4
PORT6

在SQL中,AND的优先级高于OR。因此,您所写的内容被解释为:

SELECT DISTINCT portfolio
FROM holdings_table
WHERE (as_of_date = '2022-01-01'
AND asset_class = 'bond') OR (asset_class = 'swap'
AND portfolio = 'PORT1' OR portfolio = 'PORT2' OR portfolio = 'PORT3')

你可能想写的(但请仔细检查(可以使用括号实现:

SELECT DISTINCT portfolio
FROM holdings_table
WHERE as_of_date = '2022-01-01'
AND (asset_class = 'bond' OR asset_class = 'swap')
AND (portfolio = 'PORT1' OR portfolio = 'PORT2' OR portfolio = 'PORT3')

专业提示:您可以对公文包使用asset_class IN ('bond', 'swap(`和类似的方法:这简化了查询并帮助您避免此类错误。

最新更新