У меня есть это в информации в таблице, где иногда pd_id
равно NULL
doc_id doc_title doc_order pg_id
14 a.zip 1 NULL
15 b.zip 2 NULL
12 c.zip 1 16
13 d.zip 2 16
3 f.doc 3 16
4 g.doc 4 16
Когда я хочу запросить элемент с pg_id 16, я делаю это,
SELECT *
FROM root_documents
WHERE root_documents.pg_id = '16'
Когда я хочу запросить элемент без pd_id, я делаю это:
SELECT *
FROM root_documents
WHERE root_documents.pg_id IS NULL
Я считаю, что два запроса повторяются, поэтому я пытаюсь это сделать,
SELECT *
FROM root_documents
WHERE (root_documents.pg_id = ? OR root_documents.pg_id IS NULL)
Поэтому, когда я хочу получить этот результат, только когда я запрашиваю элемент с pg_id 16,
doc_id doc_title doc_order pg_id
12 c.zip 1 16
13 d.zip 2 16
3 f.doc 3 16
4 g.doc 4 16
Но я получаю все их целые числа!
doc_id doc_title doc_order pg_id
14 a.zip 1 NULL
15 b.zip 2 NULL
12 c.zip 1 16
13 d.zip 2 16
3 f.doc 3 16
4 g.doc 4 16
Как я могу это исправитьquery,
SELECT *
FROM root_documents
WHERE (root_documents.pg_id = ? OR root_documents.pg_id IS NULL)
Или я должен повторить запрос, как обычно делаю?
EDIT:
Этот ответ мне кажется страннымкогда у меня есть параметр, который нужно передать в заполнитель:
SELECT *
FROM root_documents
WHERE (root_documents.pg_id = '16' OR (root_documents.pg_id IS NULL AND '16' IS NULL))
и когда без параметра,
SELECT *
FROM root_documents
WHERE (root_documents.pg_id = NULL OR (root_documents.pg_id IS NULL AND NULL IS NULL))
Обратите внимание, чтоЯ передаю NULL
в placeholder
, когда значение не возвращается.