Вложенное предложение SELECT в SQL Compact 3.5

В этом сообщении "выберите с вложенным выбором" Я читал, что SQL Compact 3.5 (SP1) поддерживает вложенное предложение SELECT. Но мой запрос не работает:

t1 — таблица 1 t2 — таблица 2 c1, c2 = столбцы

select 
 t1.c1, 
 t1.c2, 
 (select count(t2.c1) from t2 where t2.id = t1.id) as count_t 
from 
 t1 

Поддерживает ли SQL Compact 3.5 SP1 вложенное предложение SELECT в этом случае?

Обновлять:

SQL Compact 3.5 SP1 работает с таким типом вложенных запросов:

  • ВЫБЕРИТЕ... из... где.. IN (ВЫБРАТЬ...)
  • ВЫБЕРИТЕ... из (ВЫБЕРИТЕ...)

person Sasha    schedule 21.12.2009    source источник
comment
Какую ошибку вы получаете в этом запросе?   -  person Zann Anderson    schedule 21.12.2009
comment
Ошибка: при синтаксическом анализе запроса произошла ошибка. [Номер строки токена = 1, смещение строки токена = 40, токен с ошибкой = выберите]   -  person Sasha    schedule 21.12.2009
comment
Хорошо, ответил на исправленный вопрос тоже   -  person Murph    schedule 22.12.2009
comment
Мы уже ответили на новый вопрос?????   -  person Murph    schedule 30.12.2009
comment
Да, спасибо за помощь и совет.   -  person Sasha    schedule 30.12.2009


Ответы (4)


Спасибо всем за помощь и советы.

Окончательный ответ на вопрос - НЕТ. SQL Compact 3.5 SP1 не поддерживает вложенное предложение select.

person Sasha    schedule 30.12.2009
comment
Кто-нибудь знает, работает ли в SQL Compact 4 вложенный запрос? У меня похожая проблема, но я не могу поверить, что она все еще не работает!!! - person bubi; 27.01.2015
comment
Я сам отвечаю на свой комментарий... НЕТ, ЭТО НЕ РАБОТАЕТ - person bubi; 27.01.2015

Вы пытаетесь приравнять скалярное значение к тому, что теоретически является результирующим набором.

Пытаться

select * from LogMagazines where id IN (select max(id) from UserRoles)

Хорошо, я ответил на вопрос, и вы задали совершенно новый и другой вопрос, который не совсем так, как он должен работать, но чтобы ответить на новый вопрос, что вам нужно сделать, это соединение:

SELECT 
    t1.c1,  
    t1.c2,  
    count_t.c
FROM 
    t1 JOIN (select id, count(t2.c1) as c from t2 GROUP BY t2.id) count_t 
       ON t1.id = count_t.id

Или около того

person Murph    schedule 21.12.2009

Попробуйте запустить select max(Id) from UserRoles и убедитесь, что это возвращает правильный результат. Затем попробуйте select * from LogMagazines where id = С таким результатом, возможно, у вас где-то ошибка.

person MindStalker    schedule 21.12.2009
comment
Кстати, id = (select...) Недействителен, если подвыборка возвращает несколько строк, тогда вам нужен id IN (select....), хотя я не уверен, что это допустимо для Compact 3.5. - person MindStalker; 21.12.2009
comment
Спасибо. Выберите *...IN() для работы с SQL Compact 3.5 (SP1). Но в моем случае мне нужен еще один вложенный запрос. Я обновляю свой вопрос, чтобы указать на новую проблему. - person Sasha; 22.12.2009

Может быть, вам нужно

select * from LogMagazines where id = (select max id from UserRoles)

?

person Nate    schedule 21.12.2009
comment
Та же проблема: при синтаксическом анализе запроса произошла ошибка. [Номер строки токена = 1, смещение строки токена = 40, токен с ошибкой = выберите] - person Sasha; 21.12.2009
comment
Может быть, указанный вами пост неверен, и только 3.5SP1 поддерживает запросы подвыборки? - person Nate; 21.12.2009