На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! информация о разделе
user posted imageДанный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ.

Модераторы: Akina
  
> Access. Про запросы и вложенные.
    Дело такое:
    Пытался я на нём сделать так
    ExpandedWrap disabled
      SELECT *<br>FROM (<br>  SELECT id,name<br>  FROM tbl<br>  ) tbl1<br>


    И... не прокатило!!!
    А в MSSQL по моему это нормальн работало....

    Ну со вложеным не получилось... Думал в базе создать пару отдельных запросов...
    Создал...
    Попытался через ODBC прицепившись к базе запросить "запрос" и опять, а может снова услышел грубые ругательства в свою сторону :-[
    Что то типа что такой таблицы или запроса не найденно!!! ???
    Сообщение отредактировано: old_lamer -
      А как именно попытался запросить тот "запрос"?
      --
      Все должно работать, как минимум до пяти уровней вложенности (больше не приходилось делать :))
        ExpandedWrap disabled
          <br>CDatabase* dbs;<br>CRecReport* rstR;<br>CString DBPath;<br><br>dbs=new CDatabase;<br><br>DBPath.Format(<br> "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ= \%s;Language=us_english;","base.mdb");<br>dbs->OpenEx(DBPath,CDatabase::noOdbcDialog);<br>rstR=new CRecReport(dbs);<br><br>CString query;<br>query.Format(<br>      "SELECT *\n"<br>      "FROM by_day"<br>      );<br>rstR->Open(CRecordset::dynaset,query);<br>


        by_day - имя запроса. Этот запрос был создан в Access'е и из самого Access'а работает.
        Сообщение отредактировано: old_lamer -
          Мож подскажете что лучьше?
          У меня есть две связаные таблицы. Связанны они по ключевому полю.

          Так вот во второй талице есть записи к которым нет ключа в перовой. Типа левые.

          Мне надо в запросе получить количество записей "левых" и "правых".
          Или общее количество записей и сколько из них левых (записи во второй тбл не связанные с 1 тбл).

          То есть запрос
          SELECT *
          FROM tbl1 INNER JOIN tbl2 ON tbl1.id=tbl2.id

          вернет только связанные или как я их выше обозвал "правые" записи
          А запрос
          SELECT *
          FROM tbl1 LEFT JOIN tbl2 ON tbl1.id=tbl2.id

          Вернёт все записи включая "левые"

          А мне надо количестро и количество тех и других
          Я хотел сделать так

          SELECT *
          FROM (
           SELECT id,another_field, Count(*) AS cnt_all
           FROM tbl1 LEFT JOIN tbl2 ON tbl1.id=tbl2.id
           GROUP BY id, another_field) tb1 INNER JOIN (
           SELECT id,another_field, Count(*) AS cnt_right
           FROM tbl1 INNER JOIN tbl2 ON tbl1.id=tbl2.id
           GROUP BY id, another_field) tb2 ON tb1.id=tb2.id AND tb1.another_field=tb2.another_field

          Но не обессудьте, если я написал не правильно.

          Сообщение отредактировано: old_lamer -
            Ето работает, честно выдает, что полей 3, как и должно быть:
            ExpandedWrap disabled
                    CDatabase* dbs; <br>      CRecordset* rstR; <br>      CString DBPath; <br>      CString Count;<br> <br>      dbs = new CDatabase; <br> <br>      DBPath.Format("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=\%s;Language=us_english;","db1.mdb");<br>      dbs->OpenEx(DBPath,CDatabase::noOdbcDialog);<br>      rstR = new CRecordset(dbs); <br> <br>      CString query; <br><br>      query.Format("SELECT * FROM by_day"); <br><br>      rstR->Open(CRecordset::snapshot, query, CRecordset::readOnly);<br><br>      Count.Format("Field count: \%d", rstR->GetODBCFieldCount());<br>      MessageBox(Count);<br><br>      rstR->Close();<br>      delete rstR;<br><br>      dbs->Close();<br>      delete dbs;

            запрос by_day выбирает из запроса by_day_inner, а тот, в свою очередь из таблицы my_table.

            Ошибка где-то в другом месте.
              Блин!!!! Это я прогнал! Только сейчас понял, что у меня на машине две одинаковые БД лежали!
              Я запрос не в ту добави! Открывал БД действительно без запроса!!!

              А на счёт вышеизложенных запросов (вложенных) в access'е глухо?
                Да. Только "запрос из запроса"...
                  Ну да... я тоже так построил... нормально работает...
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0246 ]   [ 15 queries used ]   [ Generated: 27.04.24, 08:08 GMT ]