1

ちょっと複雑な質問ですが、基本的に私は多対多のテーブルを持っています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";

どんな試合でも結果を返すので、これはうまくいかないようです。この状況に精通していて、適切な構文を知っている人はいますか?

前もって感謝します。

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 に答える