SQL Server - ВЫБРАТЬ записи на основе записей из другой таблицы - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть таблица с именем dbo.Tag , которая выглядит следующим образом:

Counter|TagValue
1      |CREATED
2      |REMOVED

И я хочу получить только те записи, которые совпадают с моим dbo.Tag из моей другой таблицы с именем dbo.Transactions

Counter|TagValue
1      |CREATED
1      |UPLOADED
2      |CREATED
2      |REMOVED
3      |DELETED
4      |CREATED
4      |REMOVED

Итак, мой ожидаемый результат такой:

Counter|TagValue
2      |CREATED
2      |REMOVED
4      |CREATED
4      |REMOVED

То, что я пытался сделать , было таким запросом:

SELECT COUNTER FROM dbo.Transactions IN (SELECT * from dbo.Tag)

Но это вернуло это, не то, что мне нужно : Первая запись «Счетчик 1» не должна быть там, потому что она не имеет «УДАЛЕНО» TagValue

Counter|TagValue
1      |CREATED
2      |CREATED
2      |REMOVED
4      |CREATED
4      |REMOVED

Каков правильный запрос для выполнения вышеуказанного?

Ответы [ 4 ]

2 голосов
/ 11 апреля 2019

использовать объединение с фильтром

SELECT a.COUNTER,a.tagvalue FROM dbo.Transactions a
join dbo.Tag b on a.tagvalue=b.tagvalue
where a.tagvalue in ('CREATED','REMOVED') 
group by a.COUNTER,a.tagvalue
having count(distinct Tagvalue)=2)
1 голос
/ 11 апреля 2019

Я думаю, это будет полезно для вас:

SELECT * FROM Transactions 
WHERE Counter IN (
  SELECT Counter AS CountOf
  FROM Transactions AS T
  WHERE T.TagValue IN (SELECT TagValue FROM dbo.Tag)
  GROUP BY Counter
  HAVING COUNT(*)>1)

DEMO

0 голосов
/ 11 апреля 2019

В вашем случае может помочь следующий запрос:

SELECT TA.*
FROM dbo.Transactions TA
JOIN (  SELECT [Counter]
        FROM dbo.Transactions 
        WHERE TagValue IN (SELECT TagValue FROM dbo.Tag)  
        GROUP BY [Counter]
        HAVING COUNT(DISTINCT TagValue) = 2
) AS SQ ON SQ.[Counter] = TA.[Counter]

DEMO on db <> fiddle

0 голосов
/ 11 апреля 2019

То, что вы ищете, это ВНУТРЕННЕЕ СОЕДИНЕНИЕ. Попробуйте следующий запрос.

SELECT A.COUNTER, A.TagValue 
FROM dbo.Transactions A
INNER JOIN  dbo.Tag B
ON A.COUNTER = B.COUNTER
AND A.TagValue= B.TagValue
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...