как применить и операцию в SQL - PullRequest
0 голосов
/ 14 марта 2019

Мой запрос похож на

Select * From T Where ID=1 AND ID=2 AND ID=3 And So On

Эти идентификаторы из другого набора результатов похожи на Select ID From T2

Если я применяю IN Operation SELECT * From T Where ID IN(1,2,3) Показывает, есть ли запись для 1 или2 или 3 Но в моем требовании они должны быть ID 1 И 2 ​​И 3 означает, что ID IS 1,2,3, если 2 не существует, результат должен быть пустым, как применить этот запрос.

1,2,3из другого набора результатов, поэтому я не могу использовать напрямую и означает, что я не могу использовать where ID=1 AND ID=2 AND So On

Ответы [ 5 ]

0 голосов
/ 14 марта 2019
DECLARE @c2 INT
SELECT DISTINCT @c2 = COUNT(id) FROM T2

DECLARE @c1 INT
SELECT DISTINCT @c1 = COUNT(T.id) FROM T JOIN T2 on T.id=T2.id

SELECT * FROM T WHERE @c1 = @c2
0 голосов
/ 14 марта 2019

Вы должны сделать что-то вроде этого:

SELECT *
FROM t
WHERE id IN (SELECT id FROM t2)
AND EXISTS (
    SELECT 1
    FROM t
    WHERE id IN (SELECT id FROM t2)
    HAVING COUNT(DISTINCT id) = (SELECT COUNT(DISTINCT id) FROM t2)
)

Он вернет строки, если t содержит все идентификаторы, присутствующие в t2.

0 голосов
/ 14 марта 2019

Ваше условие Where ID=1 AND ID=2 AND ID=3 никогда не приведет к извлечению какой-либо записи, поскольку в столбце ID каждой строки может содержаться только 1 значение, которое может быть либо 1 или 2, либо 3, но не всеми.

В идеале ваш запрос должен выглядеть следующим образом:

Select * From T Where ID=1 OR ID=2 OR  ID=3 

Вышеупомянутый запрос эквивалентен

SELECT * From T Where ID IN(1,2,3)

Если вы хотите получить записи, в которых идентификатор существует в другой таблице,Есть несколько способов, таких как

1- EXISTS

Select * From T t1 
Where exists
(
 select 1 from t2 as t2 where t2.id=t1.id
) 

2- Использование IN

Select * From T t1
where id in
(
 select id from t2
) 
0 голосов
/ 14 марта 2019

Условие применяется к каждой строке.Каждая строка имеет только один идентификатор.И так, что ID не может быть равен 1, равно 2 и равно 3. Вам нужно использовать ИЛИ.

where ID=1 OR ID=2 OR ID=3
0 голосов
/ 14 марта 2019

Попробуйте это

SELECT * From T Where ID IN(Select ID From T2 where ID is not NULL)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...