Проблема SQL-запроса - PullRequest
       4

Проблема SQL-запроса

0 голосов
/ 06 июня 2011
SELECT *
FROM `friends` AS Friend
WHERE (
  (
    (
      Friend.user_id =1618
      AND Friend.profile_id =290
    )
    OR (
      Friend.to_user_id =1618
      AND Friend.to_profile_id =290
    )
  )
  AND (
    (
      Friend.user_id !=1817
      AND Friend.profile_id !=393
    )
    OR (
      Friend.to_user_id !=1817
      AND Friend.to_profile_id !=393
    )
  )
)

Я хочу те записи, которые имеют ((user_id = 1618 и profile_id = 290) ИЛИ (to_user_id = 1618 и to_profile_id = 290)), но я не включаю те записи, которые имеют ((user_id = 1817 и profile_id = 393) ИЛИ (to_user_id! = 1817 И to_profile_id! = 393

Выше не выдает вывод, как я хочу.

Пожалуйста, помогите мне написать запрос для того же. Спасибо заранее.

Ответы [ 2 ]

3 голосов
/ 06 июня 2011

Ваша «не» часть условия (1817,393), возможно, является путём решения вашей проблемы.

(user_id != 1817 AND profile_id !=393) OR (to_user_id != 1817 AND to_profile_id !=393)

Например;Если user_id и profile_id не совпадают (1817,393), то OR означает, что to_ детали никогда не нуждаются в проверке.С левой стороны ИЛИ все в порядке, не имеет значения, что происходит справа.

Вы можете изменить это следующим образом (при условии, что я вас правильно понимаю) ...

NOT ((user_id=1817 AND profile_id=393) OR (to_user_id=1817 AND to_profile_id=393))

Некоторые люди (например, я) продолжают пытаться манипулировать, чтобы избежать использования НЕ и сохранить этот крошечный кусочек обработки.Поверь мне, оно того не стоит :) 1018

SELECT *
FROM `friends` AS Friend
WHERE
 (
  (Friend.user_id    = 1618 AND Friend.profile_id    = 290)
  OR
  (Friend.to_user_id = 1618 AND Friend.to_profile_id = 290)
 )
 AND
 NOT
 (
  (Friend.user_id    = 1817 AND Friend.profile_id    = 393)
  OR
  (Friend.to_user_id = 1817 AND Friend.to_profile_id = 393)
  )
 )
2 голосов
/ 06 июня 2011

попробуйте следующее: ! сведет на нет весь второй блок

SELECT *
FROM `friends` AS Friend
WHERE
    ((Friend.user_id = 1618 AND Friend.profile_id = 290)
        OR (Friend.to_user_id = 1618 AND Friend.to_profile_id = 290))

    AND (!(Friend.user_id = 1817 AND Friend.profile_id = 393)
        OR (Friend.to_user_id = 1817 AND Friend.to_profile_id = 393))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...