SQL для выбора строк с определенным условием на основе состояния и количества - PullRequest
0 голосов
/ 14 мая 2018
ID  Foreign_ID  Number   Status_Id
1   101         xyz11    3
2   101         xyz22    3
3   201         xyz33    3
4   201         xyz44    1
5   201         xyz55    7
6   301         xyz66    1
7   301         xyz77    7
8   301         xyz88    7

Status_Id, 3 относится к активному, 1 относится к отмененному, 7 относится к отзывному. Я хочу выбрать строки, которые имеют только status_id 1 или 7 и не должны иметь активных строк.Запрос должен возвращать только строки с 301 (Foreign_ID).

Ответы [ 4 ]

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

Извините, я не могу оставить комментарий.

Поправьте меня, если я ошибаюсь, вы хотите запросить status_id 1 или 7, тогда в конце вы сказали, что хотите получить только foreign_id 301?

SELECT * FROM YOURTABLE WHERE Foreign_ID = 301

Это отобразит строки, имеющие Foreign_ID = 301

Если вы хотите отобразить только столбец Foreign_ID с Status_Id 1 или 7

SELECT Foreign_ID FROM YOURTABLE WHERE Status_Id IN (1, 7)

Или ваш 301 Foreign_ID также содержит Status_Id 1? Извините, я потерян в конце вашего заявления, а также ваших данных таблицы.

Если нет, ответ Аурете удовлетворит ваше состояние.

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

Использование not exists:

select * 
from table t
where not exists (
    select 1 from table where Foreign_ID = t.Foreign_ID and Status_Id = 3
);

Это называется коррелированным subquery, где subquery зависит от внешнего запроса, если внешняя таблица запросов имеет 3 строки, то subquery будет выполняться 3 раза.

В вашем случае подзапрос имеет фильтр с status_id = 3, что означает, что он будет выбирать только те строки, где status_id = 3, и т. Д. Внешний запрос имеет фильтр NOT EXISTS, что означает, что он будет выбирать строки, где status_id <> 3.

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

Я должен признать, что, возможно, я не полностью понял ваше требование, но это должно работать:

SELECT * FROM table WHERE (Status_Id=1 OR Status_Id=7) AND Foreign_ID=301
0 голосов
/ 14 мая 2018

Вы можете попробовать следующий код:

Select *
From Yourtablename
Where Status_Id in (1, 7)
AND Foreign_ID = 301;
...