我有下表:
片剂:
+--------+------+------+------+------+
| DataID | ColD | ColS | Col3 |Col4 |
+--------+------+------+------+------+
| 1 | A | E | Y | Z |
| 2 | B | F | Y | Z |
| 3 | C | G | Y | Z |
| 4 | B | E | Y | Z |
| 5 | T | G | Y | Z |
+--------+------+------+------+------+
我的问题是:我如何获取所有列
ColD = A OR B
AND ColS = E OR F
OR ColD = C
AND ColS = 'G'
AND col3 = 'Y'
AND col4 = 'Z'
解决方案:
SELECT *
WHERE (ColD IN ( 'A', 'B')
AND ColS IN ( 'E', 'F' )
AND Col3 = 'Y'
AND Col4 = 'Z')
OR (ColD = 'C'
AND ColS = 'G'
AND Col3 = 'Y'
AND Col4 = 'Z')
问题:如果您想知道如何获得上述解决方案,您会如何询问它以便更容易理解?
谢谢大家的帮助。
答案 0 :(得分:3)
如果我正确读到这一点,这是一个非常基本的逻辑结构。关键是使用or
分隔备选条件。
你提供的列表非常直接地翻译(有很多假设):
WHERE ( cold = 'A'
AND cols IN ( 'E', 'F' ) )
OR ( cold = 'B'
AND cols IN ( 'F', 'E' ) )
OR ( cold = 'C'
AND cols = 'G'
AND col3 = 'Y'
AND col4 = 'Z' )
然而,从实际情况来看,它可以简化一点:
WHERE ( cold IN ( 'A', 'B' )
AND cols IN ( 'E', 'F' ) )
OR ( cold = 'C'
AND cols = 'G'
AND col3 = 'Y'
AND col4 = 'Z' )
正如paulsm4所说,你需要更多的括号。现在你的问题的措辞方式(没有括号),我们无法确定评估条件的顺序(当你混合and
和or
时这很重要)。如果我们无法弄清楚相应的顺序,那么软件肯定不行。将括号括在个别操作(即(t.col3 = 'Y')
)是没有意义的;它没有表明你需要的顺序。
根据您的最新编辑,似乎您可能希望始终强制执行条件col3 = 'Y' AND col4 = 'Z'
。如果是这种情况,则条件可能如下所示:
WHERE ( ( cold IN ( 'A', 'B' )
AND cols IN ( 'E', 'F' ) )
OR ( cold = 'C'
AND cols = 'G' ) )
AND col3 = 'Y'
AND col4 = 'Z'
答案 1 :(得分:2)
试试这个:
SELECT * FROM data
WHERE (colD = 'A' OR colD = 'B') AND (colS = 'E' or colS = 'F')
OR (colD = 'C' AND colS = 'G' AND col3 = 'Y' AND col4 = 'Z')
使用提供的示例数据,得出以下结果:
DataID colD colS col3 col4
1 A E Y Z
2 B F Y Z
3 C G Y Z
4 B E Y Z
正如其他人所说,关键是将你想要的内容翻译成布尔术语。