我的查询如下,但这将返回具有规则494,788以及任何其他规则的记录。如何限制它返回只有这两个规则的记录?
select * from result where rules like '%494%'
AND rules like '%788%'
AND tradedate >= '2014-01-01'
规则列中的示例记录如下所示:| 406 | 407 | 759 | 398 | 399 | 381 | 702 |
我想要返回所有包含494 AND 788的记录,但如果他们有任何其他规则ID,我不想要它们。
答案 0 :(得分:3)
这样的事情(假设您有一个要排除的规则列表):
SELECT *
FROM result
WHERE rules IN ('494', '788', ...etc...)
如果您使用
... rules LIKE '%494%' AND rules LIKE '%788%'
这只会返回包含'494788'
等规则的记录如果您使用
... rules LIKE '%494%' OR rules LIKE '%788%'...
这将返回'1494'和'4944'等规则,因为你的双方都有一个通配符。
答案 1 :(得分:1)
如果将这些表标准化,这将会容易得多。由于当多个规则适用于特定记录时,规则是否以任何特定顺序出现,因此您需要考虑所有可能的组合。这应该给你所有的结果:
SELECT *
FROM result
WHERE rules IN ('|494|', '|788|', '|494|788|', '|788|494|')
AND tradedate >= '2014-01-01'
如果您需要查询超过一个或两个规则的组合,如果您不将这些规则存储在具有一条规则的单独规范化表格中,那么您将遇到很多困难每排。在当前表单中,您有n ^ 2个可能的组合要检查,其中n是要检查的规则数。
答案 2 :(得分:0)
select * from result where (rules like '%494%'
OR rules like '%788%')
AND tradedate >= '2014-01-01'
OR将确保两个规则分别应用,并且括号确保两者仍将与交易日期进行比较。
如果您不需要14942或27885等规则中的任何内容,请从相应的一侧删除%符号(对于任意数量的字符,百分比是通配符,包括无),或使用适当的运算符(在这种情况下可能=)< / p>