Выберите все значения, где выполняется условие, и некоторые дополнительные - PullRequest
0 голосов
/ 23 октября 2019

У меня есть таблица с полями:

| Accompanying measures (bool) | Category (String) | Instrument (String) |

Поскольку дизайн приложения не предназначался для их замены, я изменил таблицу Instrument на поле ValidUntil (тип даты)у него есть либо дата, когда он устарел, либо NULL, если он все еще действителен.
Представление отображает смесь старых и новых данных. Старые данные могут содержать Instruments, которые были признаны устаревшими, тогда как новые данные не будут.
Если я отображаю только новые инструменты ValidUntil IS NULL, я ломаю страницу, потому что есть выбранные Accompanying measures, которые не могут быть отображены, потому чтоони не извлекаются из базы данных.

Tl; др
Редактировать: Как я могу выбрать все ValidUntil IS NULL И все записи, где ValidUntil != NULL, but HasBeenSelectedAsAccompanyingMeasureправда.

SELECT
    a.AccompanyingMeasureID, a.InstrumentID, a.TaskID,         
    a.HasBeenSelectedAsAccompanyingMeasure, a.CategoryID
    , i.Name AS InstrumentName,     ic.Name AS CategoryName
FROM
    wc_AccompanyingMeasures AS a 
INNER JOIN
    wc_Instruments AS i ON a.InstrumentID = i.ID 
INNER JOIN
    wc_InstrumentCategories AS ic ON i.CategoryID = ic.ID
WHERE
    (a.TaskID = @TaskID) 
    // AND for TaskID all rows with HasBeenSelectedAsAccompanyingMeasure = 1
AND (i.ValidUntil IS NULL) 

1 Ответ

1 голос
/ 23 октября 2019

Если я понял ваш вопрос, вы должны использовать UNION ALL / UNION, чтобы объединить наборы данных двух разных условий.

--ValidUntil IS NULL
SELECT
    a.AccompanyingMeasureID, a.InstrumentID, a.TaskID,         
    a.HasBeenSelectedAsAccompanyingMeasure, a.CategoryID
    , i.Name AS InstrumentName,     ic.Name AS CategoryName
FROM wc_AccompanyingMeasures AS a 
INNER JOIN wc_Instruments AS i ON a.InstrumentID = i.ID 
INNER JOIN wc_InstrumentCategories AS ic ON i.CategoryID = ic.ID
WHERE (a.TaskID = @TaskID) 
AND (i.ValidUntil IS NULL) 
UNION ALL
--ValidUntil != NULL, but HasBeenSelectedAsAccompanyingMeasure is true
SELECT
    a.AccompanyingMeasureID, a.InstrumentID, a.TaskID,         
    a.HasBeenSelectedAsAccompanyingMeasure, a.CategoryID
    , i.Name AS InstrumentName,     ic.Name AS CategoryName
FROM wc_AccompanyingMeasures AS a 
INNER JOIN wc_Instruments AS i ON a.InstrumentID = i.ID 
INNER JOIN wc_InstrumentCategories AS ic ON i.CategoryID = ic.ID
WHERE (a.TaskID = @TaskID) 
AND (i.ValidUntil IS NOT NULL AND HasBeenSelectedAsAccompanyingMeasure='TRUE')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...