给定表中的相同行。这是SQL查询:
select * from table where (a in (0,1) and b in (0,2) and c in (0,3))
逻辑上相当于这一个:
select * from table where
(a = 0 and b = 0 and c = 0)
or
(a = 1 and b = 0 and c = 0)
or
(a = 0 and b = 2 and c = 0)
or
(a = 0 and b = 0 and c = 3)
or
(a = 1 and b = 2 and c = 0)
or
(a = 0 and b = 2 and c = 3)
or
(a = 1 and b = 0 and c = 3)
or
(a = 1 and b = 2 and c = 3);
????
答案 0 :(得分:2)
因为你问的是逻辑等价......
IN
转换为一系列OR
,所以:
a in (0,1) → a = 0 or a = 1
b in (0,2) → b = 0 or b = 2
c in (0,3) → c = 0 or c = 3
进行以下替换:
a = 0 → A0 a = 1 → A1 b = 0 → B0 b = 2 → B2 c = 0 → C0 c = 3 → C3 and → ∧ or → ∨
并考虑到conjunction's distributivity with disjunction,即
X ∧ (Y ∨ Z) ⇔ (X ∧ Y) ∨ (X ∧ Z)
你明白了:
(A0 ∨ A1) ∧ (B0 ∨ B2) ∧ (C0 ∨ C3) ⇒ ⇒ ((A0 ∨ A1) ∧ (B0 ∨ B2) ∧ C0) ∨ ((A0 ∨ A1) ∧ (B0 ∨ B2) ∧ C3) ⇒ ⇒ ((A0 ∨ A1) ∧ B0 ∧ C0) ∨ ((A0 ∨ A1) ∧ B2 ∧ C0) ∨ ∨ ((A0 ∨ A1) ∧ B0 ∧ C3) ∨ ((A0 ∨ A1) ∧ B2 ∧ C3) ⇒ ⇒ (A0 ∧ B0 ∧ C0) ∨ (A1 ∧ B0 ∧ C0) ∨ (A0 ∧ B2 ∧ C0) ∨ (A1 ∧ B2 ∧ C0) ∨ ∨ (A0 ∧ B0 ∧ C3) ∨ (A1 ∧ B0 ∧ C3) ∨ (A0 ∧ B2 ∧ C3) ∨ (A1 ∧ B2 ∧ C3)
翻译最终结果,你得到第二个查询的条件。
答案 1 :(得分:0)
逻辑上?是。但是他们可能有 非常 不同的表现。第一个只需检查三个条件(最差),第二个可能必须检查 8 。不是说一个比另一个好,因为在确定性能时有很多因素。