Как сделать несколько `OR` и` AND` в SQL - PullRequest
0 голосов
/ 02 августа 2020

Я пытался получить данные из MySQL БД. Следующий запрос ничего не дает:

SELECT * 
FROM ENTITY_RELATIONSHIPS_TABLE 
WHERE ((SUBJECT_GUID = ? AND TARGET_GUID = ?) 
       OR (TARGET_GUID = ? AND SUBJECT_GUID = ?)) 
  AND RELATIONSHIP_TYPE_VALUE_ID IN (?)  

Удаление ((SUBJECT_GUID = ? AND TARGET_GUID = ?) OR (TARGET_GUID = ? AND SUBJECT_GUID = ?)) заставляет запрос работать, что означает, что это неисправная часть.

Это работает:

SELECT *  
FROM ENTITY_RELATIONSHIPS_TABLE 
WHERE RELATIONSHIP_TYPE_VALUE_ID IN (?)  

Вот как я добавляю подготовленные значения данных:

let todo = [
    relGUIDs[0], relGUIDs[1],
    relGUIDs[1], relGUIDs[0],
]  

for (let i = 0; i < relIdsArr.length; i++) todo.push(relIdsArr[i]);  

Как я могу заставить запрос (ниже) работать?

SELECT * 
FROM ENTITY_RELATIONSHIPS_TABLE 
WHERE ((SUBJECT_GUID = ? AND TARGET_GUID = ?) 
        OR (TARGET_GUID = ? AND SUBJECT_GUID = ?)) 
  AND RELATIONSHIP_TYPE_VALUE_ID IN (?)  

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

1 Ответ

1 голос
/ 02 августа 2020

(SUBJECT_GUID = ? AND TARGET_GUID = ?) и (TARGET_GUID = ? AND SUBJECT_GUID = ?) - это одно и то же, потому что вы всегда сравниваете SUBJECT_GUID с relGUIDs[0] и TARGET_GUID с relGUIDs[1], а также todo должен иметь только 5 значения а пятое значение должно быть массивом.

Я не уверен, что вы пытаетесь сделать, но я думаю, что вы ищете что-то вроде этого:

let todo = [
    relGUIDs[0], relGUIDs[1],
    relGUIDs[0], relGUIDs[1],
    relIdsArr
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...