有点令人费解的问题,但基本上我有多对多的表word_relationships
:
+-----+--------+--------+
| ID | WORD_A | WORD_B |
+-----+--------+--------+
| 1 | 784 | 893 |
+-----+--------+--------+
| 2 | 930 | 839 |
+-----+--------+--------+
| 3 | 093 | 647 |
+-----+--------+--------+
它是word a
和word 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";
这似乎不起作用,因为我找回任何比赛的结果。任何熟悉这种情况的人都知道正确的语法吗?
提前致谢。
答案 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)