выражение небулевого типа

Используя это утверждение:

select * from qvalues where rowid ,name,compound in ( select rowid,name,compound from qvalues where rowid in (select rowid from batchinfo where instrument='tf1') group by rowid,name,compound having COUNT(*)>1 ) group by rowid,name,compound having rid=min(rid) 

Эта ошибка возникает:

Msg 4145, Level 15, State 1, Line 3 Выражение небулевого типа, указанное в контексте, где ожидается условие, рядом с ','. Msg 156, уровень 15, состояние 1, строка 8 Неверный синтаксис рядом с ключевым словом «группа».

Что не так с этим оператором SQL? Мне нужно найти все вхождения этих трех полей в таблице, having min(rid) .

Обновление. Используя этот запрос, внешний выбор не работает. Что я делаю не так?

 select * from qvalues where rid not in ( select q.rowid, q.name, q.compound, min(q.rid) from qvalues q inner join batchinfo b on q.rowid = b.rowid and b.instrument = 'tf1' group by q.rowid, q.name, q.compound having count(*) > 1) 

Я думаю, что это эквивалентно тому, чего вы пытаетесь достичь.

 select min(q.rid) from qvalues q inner join batchinfo b on q.rowid = b.rowid and b.instrument = 'tf1' group by q.rowid, q.name, q.compound having count(*) > 1 

Финал having min(rid) должен иметь сравнение

Говоря, что нет связанной группы GROUP BY, которую вы можете увидеть, измените ли вы свой фрагмент кода

 select * from qvalues where rowid ,name,compound in ( select rowid,name,compound from qvalues where rowid in (select rowid from batchinfo where instrument='tf1') group by rowid,name,compound having COUNT(*)>1 ) --missing group by having min(rid) -- > foo 

Изменить: переформулировано:

 select * from ( select rowid,name,compound, min(q.rid) as minrid from qvalues q where EXISTS (SELECT * FROM batchinfo b where b.instrument='tf1' AND b.rowid = q.rowid) group by rowid,name,compound having COUNT(*)>1 ) foo JOIN qvalues q2 On foo.rowid = q.rowid AND foo.name = q.name AND foo.compound = q.compound AND foo.minrid = q2.rid 

И ваша первоначальная ошибка, вероятно, связана с отсутствием псевдонима производной таблицы в сочетании с тем фактом, что SQL Server не поддерживает многоколоночное IN. Я использую EXISTS не JOIN, потому что вы можете получить больше строк из qvalues ​​JOIN batchinfo, чем вы ожидаете (на основе ответа Джо)