ГДЕ, И. ИЛИ в одном запросе - PullRequest
0 голосов
/ 15 мая 2018
SELECT * FROM company_disposition WHERE company_id = $1 AND campaign_uuid = 'null' OR campaign_uuid != $2

Вот мой запрос postgres .. Я не хочу получать все значения which company_id = $1 AND campaign_uuid = 'null' OR campaign_uuid != $2 .. Как это сделать?мой запрос, который вы видите, не работает //

 {
      "company_id": "be1b5ee1-51e7-422b-b469-592dbd62bec9",
      "disposition": "string",
      "disposition_uuid": "8f66c72a-9a68-440a-bd7f-3a0f49ef4973",
      "disposition_order": 2323,
      "campaign_uuid": "fd80a1fa-947d-4b09-a755-cee5951b6c85"
    },
    {
      "company_id": "be1b5ee1-51e7-422b-b469-592dbd62bec9",
      "disposition": "strinsdsdg",
      "disposition_uuid": "4c8e9601-1894-4e69-b22c-f2b83d9d80bb",
      "disposition_order": 2323,
      "campaign_uuid": null
    }

Я хочу получить этот запрос:

 {
      "company_id": "be1b5ee1-51e7-422b-b469-592dbd62bec9",
      "disposition": "strinsdsdg",
      "disposition_uuid": "4c8e9601-1894-4e69-b22c-f2b83d9d80bb",
      "disposition_order": 2323,
      "campaign_uuid": null
    }

"campaign_uuid" - может быть как значение или ноль

Ответы [ 3 ]

0 голосов
/ 15 мая 2018

Есть две проблемы с вашим запросом (если я правильно его прочитал):

  1. Вы сравниваете с NULL, используя оператор =.

    SQL использует логика с тремя значениями для операторов сравнения, так что сравнение NULL (= неизвестно) ни с чем не является ни TRUE, ни FALSE, но NULL.

    Это означает, что условие something = NULL никогда не TRUE (всегда NULL).

    Вы должны использовать оператор IS NULL, чтобы проверить, имеет ли значение NULL.

  2. Вы забыличто AND имеет более высокий приоритет, чем OR, поэтому вы должны использовать скобки.

Я думаю, что вы имеете в виду следующее:

SELECT * FROM company_disposition
WHERE company_id = $1
  AND (campaign_uuid IS NULL OR campaign_uuid <> $2);

Если вы никогдаукажите значение NULL за 2 доллара, более простой способ будет

SELECT * FROM company_disposition
WHERE company_id = $1
  AND campaign_uuid IS DISTINCT FROM $2;
0 голосов
/ 15 мая 2018

Попробуйте с:

SELECT * FROM company_disposition WHERE company_id = $1 AND (campaign_uuid is null OR campaign_uuid <> $2)

Этот запрос может вернуть несколько строк, все строки с company_id = $ 1 и campaign_uuid! = $ 2, (условие campaign_uuid! = $ 2 будет включать строки с campaign_uuid =null), если вы хотите получить только одну строку для каждого company_id, вам нужно использовать «DISTINCT»

Пример:

SELECT DISTINCT ON (company_id)
     company_id,
     disposition,
     disposition_uuid,
     disposition_order,
     campaign_uuid
FROM
   company_disposition
WHERE
   company_id = $1 AND
   (campaign_uuid is null OR campaign_uuid <> $2)
ORDER BY company_id
0 голосов
/ 15 мая 2018
SELECT * FROM company_disposition WHERE company_id = $1 AND campaign_uuid is null OR campaign_uuid <> $2 AND company_id = $1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...