Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.146.255.127] |
|
Данный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ. |
Сообщ.
#1
,
|
|
|
Дело такое:
Пытался я на нём сделать так SELECT *<br>FROM (<br> SELECT id,name<br> FROM tbl<br> ) tbl1<br> И... не прокатило!!! А в MSSQL по моему это нормальн работало.... Ну со вложеным не получилось... Думал в базе создать пару отдельных запросов... Создал... Попытался через ODBC прицепившись к базе запросить "запрос" и опять, а может снова услышел грубые ругательства в свою сторону :-[ Что то типа что такой таблицы или запроса не найденно!!! ??? |
Сообщ.
#2
,
|
|
|
А как именно попытался запросить тот "запрос"?
-- Все должно работать, как минимум до пяти уровней вложенности (больше не приходилось делать ) |
Сообщ.
#3
,
|
|
|
<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'а работает. |
Сообщ.
#4
,
|
|
|
Мож подскажете что лучьше?
У меня есть две связаные таблицы. Связанны они по ключевому полю. Так вот во второй талице есть записи к которым нет ключа в перовой. Типа левые. Мне надо в запросе получить количество записей "левых" и "правых". Или общее количество записей и сколько из них левых (записи во второй тбл не связанные с 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 Но не обессудьте, если я написал не правильно. |
Сообщ.
#5
,
|
|
|
Ето работает, честно выдает, что полей 3, как и должно быть:
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. Ошибка где-то в другом месте. |
Сообщ.
#6
,
|
|
|
Блин!!!! Это я прогнал! Только сейчас понял, что у меня на машине две одинаковые БД лежали!
Я запрос не в ту добави! Открывал БД действительно без запроса!!! А на счёт вышеизложенных запросов (вложенных) в access'е глухо? |
Сообщ.
#7
,
|
|
|
Да. Только "запрос из запроса"...
|
Сообщ.
#8
,
|
|
|
Ну да... я тоже так построил... нормально работает...
|