Russian Qt Forum
Ноябрь 23, 2024, 07:57 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: как сделать выборку из двух таблиц базы  (Прочитано 3950 раз)
Jkc
Гость
« : Март 14, 2006, 11:17 »

Всем привет у меня такой вопрос.
В базе данных 2 таблицы они почти одинаковы т.е. одна это 'склад' вторя это 'складпартнёров' если пользователь отмечает чекбокс то нужно выбирать из двух таблиц а если нет то только из одной, как бы это организовать?
Из одной я делаю это так.
Код:

// делаем условие select

    if(   createConnections() ){
   
QSqlSelectCursor * cursor = new QSqlSelectCursor( "SELECT   fstype, fsmet, fsmark, fstols, fsshir, fsdlin, fsves, fscena, fsprim FROM fdt_sklad, fdt_met  "+select);      
   
   datTabStore->setSqlCursor( cursor,TRUE);
   datTabStore->addColumn( "fstype",  "Тип", 70);
   datTabStore->addColumn( "fsmet",  "Металл", 70);
   datTabStore->addColumn( "fsmark",  "Марка", 75);
   datTabStore->addColumn( "fstols",  "Толщина", 60);
   datTabStore->addColumn( "fsshir",  "Ширина" , 60);
   datTabStore->addColumn( "fsdlin",  "Длинна" , 60);
   datTabStore->addColumn( "fsves",  "Вес" , 60);
   datTabStore->addColumn( "fscena",  "Цена", 60);
   datTabStore->addColumn( "fsprim",  "Примечание", 78);
   dataTable1->setSorting( TRUE );
   datTabStore->refresh();
   datTabStore->show();
     
}    


пытался делать такой запрос но выводит общее кол-во записий заполненых первой таблицей.
Код:
  QSqlSelectCursor * cursor = new QSqlSelectCursor( "SELECT   fstype, fsmet, fsmark, fstols, fsshir, fsdlin, fsves, fscena, fsprim FROM fdt_sklad, fdt_met  WHERE fdt_sklad.fstype = 'круг' AND  fdt_met.ftype = 'круг'");  
Записан
Steven_Orko
Гость
« Ответ #1 : Март 15, 2006, 00:01 »

Вообще твой вопрос имеет мало отношения к Qt, это все по части SQL.
Сформулируй конкретнее вопрос. Что значит выбирать из двух, или из одной? Если выбирать из двух, то из какой и что? Если выбирать из одной, то тот же вопрос, из какой и что?

По поводу первого... Когда надо выбрать из двух, причем все, что есть, то надо использовать UNION селектов, т.е. объединение запросов. При этом имена полей должны совпадать.
Для одной таблицы можно использовать половины первого запроса либо до UNION, либо после.

Например, есть две таблицы: depository и depository_of_partners.
Они по структуре одинаковы:
Код:
CREATE TABLE "depository" 
{
"fstype" <Не знаю, что здесб хранится>,
"fsmet" INT,
"fsmark" VARCHAR(50),
"fstols" REAL NOT NULL,
"fsshir" REAL NOT NULL,
"fsdlin" REAL NOT NULL,
"fsves"  REAL NOT NULL,
"fscena" READ NOT NULL,
"fsprim" VARCHAR(500)
}

CREATE TABLE "depository_of_partners"
{
"fstype" <Не знаю, что здесб хранится>,
"fsmet" INT,
"fsmark" VARCHAR(50),
"fstols" REAL NOT NULL,
"fsshir" REAL NOT NULL,
"fsdlin" REAL NOT NULL,
"fsves"  REAL NOT NULL,
"fscena" READ NOT NULL,
"fsprim" VARCHAR(500)
}



Надеюсь, не сильно переврал структуру. )))
Так вот... Допустим, нам надо выбрать из первой таблицы что... Пишем:

Код:

SELECT DISTINCT "fstype", "fsmet", "fsmark", "fscena" FROM "depository" ORDER BY "fscena";


Аналогично и для другой таблицы:
Код:

SELECT DISTINCT "fstype", "fsmet", "fsmark", "fscena" FROM "depository_of_partners" ORDER BY "fscena";


Ну, а теперь выбираем из обеих:

Код:
SELECT DISTINCT "fstype", "fsmet", "fsmark", "fscena" FROM "depository" ORDER BY "fscena"
UNION
SELECT DISTINCT "fstype", "fsmet", "fsmark", "fscena" FROM "depository_of_partners" ORDER BY "fscena";


Получаешь выборку из двух таблиц.
 Все это в общем случае... А так.. конкретнее задавай вопрос )))
Записан
Jkc
Гость
« Ответ #2 : Март 15, 2006, 11:28 »

Спасибо, думаю так должно заработать, смысл вот в чем, нужно выбирать данные из таблицы 'склад', но по условию(чекбокс) нужно ещё выбирать не только со своего склада но и из таблицы 'склады партнёров' и вставлять всё в один QDataTable.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.047 секунд. Запросов: 21.