MYSQL和OR在多对多表上

时间:2012-05-23 01:31:16

标签: mysql sql

有点令人费解的问题,但基本上我有多对多的表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";

这似乎不起作用,因为我找回任何比赛的结果。任何熟悉这种情况的人都知道正确的语法吗?

提前致谢。

2 个答案:

答案 0 :(得分:4)

我认为您可以将括号放在where子句中以正确组合OR。

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

我不完全确定我理解你对查询的意图。希望有所帮助。

顺便说一下,你收到所有结果的原因是因为order of precedence for SQL operators.

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

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

会比你期望的要多得多。

答案 1 :(得分:3)

这应该有效:

SELECT 
  id 
FROM 
  word_relationships
WHERE 
 (Word_A = w1 AND Word_B = w2)
OR 
 (Word_A = w2 AND Word_B = w1)