как игнорировать, где условие результатов и выбрать оставшиеся результаты в SQL Server

0

У меня есть таблица с 17 записями. Я выбираю строки по условию where, например, под запросом:

SELECT * FROM T1 WHERE (c1='AA' and c3=13)

Результатом этого запроса были 2 записи. теперь я хочу выбрать 15 записей таблицы T1 !!! я добавляю оператор not перед тем условием where, как:

SELECT * FROM T1 WHERE not (c1='AA' and c3=13)

Результатом этого запроса были 14 записей. но в таблице 17 записей невозможно использовать предложение EXCEPT, потому что в этом разделе выбираются только отдельные записи.

Теги:
sql-server

4 ответа

2

Что делать, если я использую EXISTS?? для SQL Server

select * from t1 t
where not exists(
         select * from t1 where (t.c1='AA' and t.c3=13)
)
  • 0
    Ваш подзапрос не коррелирован.
  • 0
    нет. это не правильно, я проверил ваш запрос, и результатов было 0 записей. w3schools.com/sql/sql_exists.asp существует, возвращает true или false. если в подзапросе есть только строки, выберите все строки. если не существует, возвращает 0 записей, @Yogesh Sharma
Показать ещё 1 комментарий
0
  SELECT * FROM t1
               WHERE PrimaryKey_Col not in (
                 SELECT PrimaryKey_Col FROM t1 WHERE t.c1='AA' and t.c3=13
                                           );

Примечание. Этот запрос легко работает на основе PrimaryKey

  • 0
    я хочу общий запрос и таблица может быть не первичный ключ
0

В случае, если Id является Duplicate, то используйте функцию Row_number().

SELECT T1.* FROM T1 
          LEFT JOIN (SELECT * FROM T1 WHERE (c1='AA' AND c3=13)) AS T2 
            ON(T1.ID=T2.ID) WHERE T2.ID IS NULL; 
  • 0
    спасибо за ваше решение, но RowNumber () требует заказ, и это дополнительные расходы
  • 0
    Да, но у нас нет уникальных столбцов, поэтому используйте «Row_number () over (order by (select 1))» внутри производных таблиц и объедините их.
Показать ещё 1 комментарий
0

Пожалуйста, попробуйте вот так, ЗАКЛЮЧИТЕ пункт

SELECT DISTINCT * FROM 
(
    SELECT * FROM T1
    EXCEPT
    SELECT * FROM T1 WHERE (c1='AA' and c3=13)
)k
  • 0
    вернуть только отдельные строки
  • 0
    Обновил решение.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню