Ces*_*sar 8 mysql sql evaluation where-clause
按@Cesar要求更新.希望我明白你想要什么,如果没有,请恢复.Quassnoi.
如果我这样做一个SQL查询:SELECT * FROM TABLE_NAME WHERE b IN (2, 7) AND c IN (3, 9),我可以假设MySQL只匹配每个列表中具有相同编号的元素的对吗?
也就是说,(2, 3),(7, 9),...?
例如,假设我们有一个这样的表:
+----------+----------+----------+ | PK | b | c | +----------+----------+----------+ | 1 | 2 | 3 | +----------+----------+----------+ | 2 | 5 | 4 | +----------+----------+----------+ | 3 | 7 | 9 | +----------+----------+----------+ | 4 | 7 | 4 | +----------+----------+----------+ | 5 | 2 | 9 | +----------+----------+----------+
假设返回的唯一行是1和3(而不是5),这是正确的吗?
Qua*_*noi 22
Run Code Online (Sandbox Code Playgroud)SELECT * FROM TABLE_NAME WHERE b IN(5,7) AND c IN(4,4)
这个查询将返回行,其中b要么是5或7,和c是4.
"成对评价"是什么意思?
更新:
我将在示例中再添加一行:
+----------+----------+----------+
| PK | b | c |
+----------+----------+----------+
| 1 | 2 | 3 |
+----------+----------+----------+
| 2 | 5 | 4 |
+----------+----------+----------+
| 3 | 7 | 9 |
+----------+----------+----------+
| 4 | 7 | 4 |
+----------+----------+----------+
| 5 | 2 | 9 |
+----------+----------+----------+
Run Code Online (Sandbox Code Playgroud)
如果要匹配整个集,可以使用以下语法:
SELECT *
FROM table_name
WHERE (b, c) IN ((2, 3), (7, 9))
Run Code Online (Sandbox Code Playgroud)
这意味着:"返回所有行b是2和c是3在同一时间,或者b是7和?是9在同一时间."
在上面的示例中,此查询将返回行1和3
但是如果你反过来重写这个查询,就像这样:
SELECT *
FROM table_name
WHERE b IN (2, 7)
AND c IN (3, 9)
Run Code Online (Sandbox Code Playgroud)
,这将意味着"返回所有行b要么是2或7,AND c或者是3或9).
这将返回行1,3并且5,由于行5满足第二查询,但不是第一个条件.
第2行和第4行的返回是正确的,尽管您选择(4,4)会使其更加混乱,因为它是多余的.AND表示该行必须满足您的条件才能成为真.如果查询有WHERE b IN(5,7) AND c IN(4,9),则返回第2,3和4行.
如果你想成对,你需要拥有所有的组合.例如,b IN(5,7) AND c IN(4,9)将产生(5,4),(5,9),(7,4)和(7,9)作为可行的组合,而不仅仅是(5,4)和(7,9)
您可以按顺序评估每个条件,它可以让您更好地了解这里发生的事情.您的查询声明应该选择所有值,其中b是5或7且c是4,所以让我们使用first condition(b IN (5,7))减少表:
+----------+----------+----------+
| PK | b | c |
+----------+----------+----------+
| 1 | 2 | 3 | < No match
+----------+----------+----------+
| 2 | 5 | 4 | < Match
+----------+----------+----------+
| 3 | 7 | 9 | < Match
+----------+----------+----------+
| 4 | 7 | 4 | < Match
+----------+----------+----------+
Run Code Online (Sandbox Code Playgroud)
现在,让我们评估下一个条件,两者都必须为真,以便选择一行(c IN (4,4),它基本上是相同的c = 4):
+----------+----------+----------+
| PK | b | c |
+----------+----------+----------+
| 2 | 5 | 4 | < Match
+----------+----------+----------+
| 3 | 7 | 9 | < No match
+----------+----------+----------+
| 4 | 7 | 4 | < Match
+----------+----------+----------+
Run Code Online (Sandbox Code Playgroud)
其他一切都是有效的:
+----------+----------+----------+
| PK | b | c |
+----------+----------+----------+
| 2 | 5 | 4 |
+----------+----------+----------+
| 4 | 7 | 4 |
+----------+----------+----------+
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6784 次 |
| 最近记录: |