Вопрос по sql, mysql – MYSQL и OR для таблицы «многие ко многим»

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

Это, похоже, не работает, потому что я получаю результат для любого совпадения. Кто-нибудь знаком с этой ситуацией и знает правильный синтаксис?

Заранее спасибо.

Ваш Ответ

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

который вернул бы намного больше, чем вы ожидали.

Сет, большое спасибо за твой ответ. Сначала Кен сделал это, поэтому я поставил ему галочку, но я поднял вам голос за ваши неприятности. Howard Zoopaloopa
Мне просто нужно увидеть, что между двумя словами существует связь. Отношения будут существовать, если они разделяют строку в этой таблице. Опробовать sql сейчас. Howard Zoopaloopa
3

SELECT 
  id 
FROM 
  word_relationships
WHERE 
 (Word_A = w1 AND Word_B = w2)
OR 
 (Word_A = w2 AND Word_B = w1)
И несколько изменений в порядке ваших сравнений. :) +1 к вашему вопросу, кстати - отличная работа по включению всей информации, необходимой нам для предоставления ответа.
Действительно? Я просто пропустил некоторые скобки ?? Howard Zoopaloopa

Похожие вопросы