SQL 中的 IN 语句仅 returns 第一个值

IN statement in SQL only returns 1st value

我在 SQL 中编写了代码以从两个单独的表中提取数据并将它们连接在一起。我正在尝试使用 IN 语句来限定我的结果,以便只显示与某些交易对手的交易。

SELECT "Trade Details 2".Portfolio, 
"Trade Details 2".CONTRACT_ID, 
DATE("Trade Details 2".START_DATE) as START_DATE, 
DATE(substr("Trade Details 2".MATURITY_DATE, 0, 5) || '-' || substr("Trade 
Details 2".MATURITY_DATE, 5,2) || '-' ||   substr("Trade Details 
2".MATURITY_DATE, 7, 9)) as MATURITY_DATE, 
"Trade Details 2".NOTIONAL1,
"Trade Details 2".CONTRACT_NPV,
"Trade Details 2".COUNTERPARTYNAME,
"Trade Details".TERM
FROM "Trade Details 2" 
JOIN "Trade Details" 
WHERE "Trade Details 2".CONTRACT_ID="Trade Details".FCC_ID and
("Trade Details 2".NOTIONAL1 > "0.0") and
("Trade Details 2".MATURITY_DATE > DATE(substr('20180602', 0, 5) || '-' || 
substr('20180602', 5,2) || '-' ||    substr('20180602', 7, 9)) ) and
("Trade Details 2".COUNTERPARTYNAME IN ('A', 'B', 'C'))
ORDER BY "Trade Details 2".COUNTERPARTYNAME asc

然而,当我 运行 在 DB Browser 中查询 SQL 时,只有与 COUNTERPARTY 'A' 的交易出现,即使我知道我们与交易对手 B 和C也一样。我做错了什么?

您的 SQL 'IN' 子句是正确的。好吧,至少理论上是这样。

有很多问题可能会导致这样的事情 - 如果您不实际将问题简化为一个极简示例并包括示例数据,则很难判断。

一些可能性:

A) 你 没有 实际上有 CounterParty 'B' - 至少,没有 also 匹配其余的 Where 子句。您可以通过简单地删除查询的 'CounterParty' 部分并实际验证确实存在未被删除的 'B' 行来确定是否属于这种情况。

B) 您的数据 justified/padded/etc 与您预期的不同。 这些行中 'B' 之前是否有空格?那么您的 'IN' 子句将不匹配。

C) 你的 Where 子句中有一个错误正在删除有效行。 我的意思是,看看这些段:

substr('20180602', 0, 5)
substr('20180602', 5,2)
substr('20180602', 7, 9)

...到底是什么?第二个看起来是正确的。第三个可能有用,但只是因为从第 7 个位置开始只有两个字符(而且它们是你想要的两个字符)但我很难相信第一个 substr 实际上正在做你的事情想要。

老实说,整个日期比较太可怕了。我的意思是,您正在组装日期字符串...通过重新组装已经是字符串文字的 different 日期字符串。嗯?为什么不直接使用:

and ("Trade Details 2".MATURITY_DATE > DATE('2018-06-02'))

不管怎样,我觉得你在发帖之前并没有真正努力解决这个问题。您调整了多少种不同的 WHERE 子句来找出是什么过滤了您的数据?