2015-03-17 1 views
0

может кто-то пожалуйста, скажите мне, что случилось с помощью следующего запросаВ SQL Server, почему косяк мы используем функции при сравнении данных из двух таблиц

select 1 
from table1 a, 
table2 b 
where a.pdate=max(b.pdate) 

Это не компилируется.

другой способ, чтобы написать этот запрос является

set @pdate=pdate from table2 
select 1 
from table1 a, 
table2 b 
where a.pdate=max(b.pdate) 

Но я хочу, чтобы понять, что случилось с первого запроса.

Thanks

+0

Вы косяк использовать максимум в пункте, где ... смотрите этот http://stackoverflow.com/questions/22538287/max-function-in-where-clause -mysql –

ответ

0

даже второй запрос неверен.

Правильный путь,

Select @pdate=max(pdate) from table2 

select 1 
from table1 a where [email protected] 

или

select 1 
    from table1 a where a.pdate=(Select max(pdate) from table2) 

если вы упоминаете другое имя столбца отдельно от совокупного столбца, то вы Нч использовать группу по

2

Но я хочу понять, что не так с первым запросом.

Сообщение об ошибке сообщает вам что-то, что может быть полезно для вас.

Агрегат может не отображаться в предложении WHERE, если оно не находится в подзапроса, содержащегося в пункте HAVING или списка выбора, а столбец быть агрегированы является внешней ссылкой.

Функция - это совокупность, которая возвращает максимальное значение для набора строк. Предложение where используется для фильтрации строк. Поэтому, если вы используете агрегат в том месте, где вы делаете фильтрацию, неясно, какие строки вы действительно хотите для максимального значения.

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

select 1 
from dbo.table1 as a 
where a.pdate = (
       select max(b.pdate) 
       from dbo.table2 as b 
       ); 
Смежные вопросы