1

有点令人费解的问题,但基本上我有一个多对多表word_relationships

+-----+--------+--------+
|  ID | WORD_A | WORD_B |
+-----+--------+--------+
|  1  |  784   |  893   |
+-----+--------+--------+
|  2  |  930   |  839   |
+-----+--------+--------+
|  3  |  093   |  647   |
+-----+--------+--------+

它是一个列表word aword b关系。我需要查询 word_a 和 word_b 之间的关系是否存在。如果单词可以是单词 A 或单词 b,那么正确的语法是什么?

在我的脑海里

w1 = 784
w2 = 893
"SELECT ID FROM word_relationships WHERE WORD_A = w1 OR WORD_B = w1 AND WORD_A = w2 OR WORD_B = w2";

这似乎不起作用,因为我得到了任何匹配的结果。任何熟悉这种情况并知道正确语法的人?

提前致谢。

4

2 回答 2

4

我认为您可以在 where 子句中加上括号来正确组合 OR。

SELECT ID 
FROM word_relationships 
WHERE (WORD_A = w1 OR WORD_B = w1) 
AND (WORD_A = w2 OR WORD_B = w2)

不过,我不完全确定我是否理解您的查询意图。希望有帮助。

顺便说一句,您获得所有结果的原因是因为SQL 运算符的优先顺序。

由于 AND 在 OR 之前被评估,这意味着默认情况下该子句按如下方式分组:

WHERE WORD_A = w1 
OR (WORD_B = w1 AND WORD_A = w2) 
OR WORD_B = w2

这将返回比您预期的要多得多。

于 2012-05-23T01:38:29.690 回答
3

这应该有效:

SELECT 
  id 
FROM 
  word_relationships
WHERE 
 (Word_A = w1 AND Word_B = w2)
OR 
 (Word_A = w2 AND Word_B = w1)
于 2012-05-23T01:38:09.277 回答