2012-05-23 75 views
1

樣的一個令人費解的問題,但是,基本上我有一個多對多的表word_relationshipsMySQL和或多對多表

+-----+--------+--------+ 
| 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"; 

這似乎並沒有工作,因爲我回來任何比賽的結果。任何人都熟悉這種情況,並知道正確的語法?

在此先感謝。

回答

3

這應該工作:

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

真的嗎?我只是想念一些括號? –

+0

並對比較順序進行一些更改。 :) +1你的問題,順便說一句 - 包括我們需要提供答案的所有信息的好工作。 –

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 

這會比您期待的要多得多。

+0

我只需要看到兩個單詞之間存在關係。如果他們在這張表中共享一行,這種關係就會存在。現在試用sql。 –

+0

塞思,非常感謝您的回覆。肯首先得到了他的名字,所以我給了他對號,但是我爲你的煩惱給了你一個贊成票。 –