Установить значение по умолчанию для предложения WHERE для определенных столбцов - PullRequest
0 голосов
/ 16 февраля 2019

Предположим, я создал такую ​​таблицу:

CREATE TABLE stuff(
  a1 TEXT,
  a2 TEXT,
  . . .
  an TEXT,
  data TEXT
);

Мне нужно сделать SELECT запросов, таких как:

SELECT data FROM stuff WHERE
a1="..." and a2="..." and . . . and an="..."

, выбрав определенное значение данных, с все a указаны значения.

Есть много a с некоторым значением, которое я считаю значением по умолчанию.

Есть ли способ добавить некоторыетип оператора для таблицы или запроса, который будет использовать некоторое значение по умолчанию для a s, которые явно не ограничены в предложении where?Например, если я не пишу a1="b" после where, я получаю только строки, где a1 равно "b", а не какое-либо значение, но если я пишу a1="c", я получаю их.

Значение по умолчанию одинаково для всех a с.

Лучшее решение для меня - запечь значение по умолчанию для таблицы или файла базы данных.

1 Ответ

0 голосов
/ 16 февраля 2019

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

ShortОтвет: Нет.

Исходя из того, что вы сказали здесь:

Например, так что если я не напишу a1 = "b" послегде

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

Что вы можете сделать, так это указать в выражении CASE, что WHERE поможет вам.Рассмотрим следующее:

SELECT *
FROM
    table
WHERE
    CASE
        WHEN %s IS NOT NULL
            THEN a1 = %s
        ELSE a1 = 'b'
        END
    [AND/OR] <other constraints here>

Теперь синтаксис того, как вы на самом деле это делаете, будет зависеть от того, что вы на самом деле используете для выполнения ваших запросов.Они запускаются из программы Python?что-то в .net?и т. д.

Кроме того, вам не нужно строго придерживаться IS NOT NULL, который я там использовал, у вас могут быть другие значения для других целей.На ваше усмотрение.

РЕДАКТИРОВАТЬ:

По мнению Шона в комментариях, если %s, передаваемый аргумент, является NOT NULL или легитимнымзначение, тогда ifnull() будет более чистой альтернативой для этого оператора case.Пример ниже:

WHERE
    a1 = ifnull(%s, 'b')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...