Составной оператор SQLITE3 «Выбрать» - PullRequest
1 голос
/ 02 января 2012

У меня есть таблица с несколькими столбцами.Столбцы 1 и 2 могут содержать любое из четырех альфа-значений: set = {A, B, C, D}.

Я хочу проверить, есть ли в каждом столбце одно из двух значений из набора.Поэтому я хочу упростить это утверждение:

SELECT * FROM MUTATION-TABLE WHERE (COLUMN1 = "A") OR (COLUMN2 = "A") OR (COLUMN3 = "A")
 OR (COLUMN1 = "B") OR (COLUMN2 = "B") OR (COLUMN3 = "B").

Есть ли способ упростить это утверждение.Когда я добавлю больше столбцов, будет больше мутаций для проверки.Я вижу, что оператор SQL становится длинным / повторяющимся.

Ответы [ 3 ]

3 голосов
/ 02 января 2012

Если у вас есть только два значения, но много столбцов, переключитесь на IN и проверьте свои постоянные значения в наборе столбцов:

SELECT *
FROM "MUTATION-TABLE"
WHERE 'A' IN (COLUMN1, COLUMN2, COLUMN3)
   OR 'B' IN (COLUMN1, COLUMN2, COLUMN3)

И с дополнительными столбцами:

SELECT *
FROM "MUTATION-TABLE"
WHERE 'A' IN (COLUMN1, COLUMN2, COLUMN3, COLUMN4, COLUMN5)
   OR 'B' IN (COLUMN1, COLUMN2, COLUMN3, COLUMN4, COLUMN5)

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

1 голос
/ 02 января 2012

Вы можете использовать in в своем предложении where вместо прямой проверки равенства.Пример:

SELECT
    *
FROM
    mytable
WHERE
    col1 IN ("A", "B")
    OR col2 IN ("A", "B")
    OR col3 IN ("A", "B")
0 голосов
/ 02 января 2012

При прочих равных условиях, я думаю, я бы изменил структуру БД, чтобы исключить несколько столбцов. Хотя я понимаю, что это может быть немного впереди, это очень значительно снизит сложность вашего SQL. Тот факт, что вы уже рассматриваете возможность добавления дополнительных столбцов для дополнительных мутаций, только укрепляет мои мысли о том, что это правильное направление.

Пример - при условии, что ваш существующий первичный ключ имеет имя пациента.

новая таблица - существующие мутации PatientID - PK mutationType - char

SQL становится

SELECT *
FROM MUTATION-TABLE
WHERE patientID IN (SELECT patienID 
                    FROM existing-mutations 
                    WHERE mutationType = "A")

Надеюсь, это поможет.

...