Организовать Запрос "select From ... Union ... Select From"

  • Автор темы Guest
  • Дата начала
G

Guest

#1
есть у меня две таблицы надо организвать запрос типа union (sql)
вот задание само
Примеры. Пусть в БД есть таблицы BLOKDYSC1 (KodDysc, NazvDysc, ObsCred, KodCycl, NomKaf) и BLOKDYSC2 (KodDysc, NazvDysc, ObsCred, KodCycl, NomKaf), где KodDysc, NazvDysc - текстовые атрибуты; KodCycl, NomKaf - целочисленные атрибуты; ObsCred - численный атрибут .
Пример 1. SELECT KodDysc, NazvDysc, ObsCred, KodCycl, NomKaf FROM BLOKDYSC1 KodCycl, NomKaf UNION SELECT KodDysc, NazvDysc, ObsCred, KodCycl, NomKaf FROM BLOKDYSC2;

я тут что-то писала, прошу сильно не ругаться, я знаю, что это все довольно-таки печально и плохо.
но очень нужна ваша помощь.
я не могу сообразить как именно, мне организовать запрос этот.
хелп ми, плиз)
:)

C++:
#include "stdafx.h"


#include "stdafx.h"
#include "iostream"
#include "windows.h"
#include <string.h>
#include <fstream>
#include <iomanip>

using namespace std;

class BLOKDYSC1
{
char KodDysc[20];
char NazvDysc[20];
float ObsCred;
int KodCycl;
int NomKaf;
public:

void print()
{

cout<<"Код Дисципліни "<<KodDysc<<endl;
cout<<"Назва дисципліни "<<NazvDysc<<endl;
cout<<"Обсяг кредитів "<<ObsCred<<endl;
cout<<"Код циклу "<<KodCycl<<endl;
cout<<"Номер кафедри "<<NomKaf<<endl;
}


void SetKodDysc(char * _KodDysc){strcpy(KodDysc, _KodDysc);}
void SetNazvDysc(char * _NazvDysc){strcpy(NazvDysc, _NazvDysc);}
void SetObsCred(float _ObsCred){ObsCred=_ObsCred;}
void SetKodCycl(int _KodCycl){KodCycl=_KodCycl;}
void SetNomKaf(int _NomKaf){NomKaf= _NomKaf;}
char * GetKodDysc(){return KodDysc;}
char * GetNazvDysc(){return NazvDysc;}
float GetObsCred(){return ObsCred;}
int GetKodCycl(){return KodCycl;}
int GetNomKaf(){return NomKaf;}

};


void File(BLOKDYSC1 *blokdysc, char * filename, int numb)
{
ofstream f(filename, ios::app);
for(int i=0; i<numb; i++)
{

f<<blokdysc[i].GetKodDysc()<<" "<<blokdysc[i].GetNazvDysc()<<" "<<blokdysc[i].GetObsCred()<<" "<<blokdysc[i].GetKodCycl()<<" "<<blokdysc[i].GetNomKaf()<<'\n';
}
f.close();
}





void FileRead(BLOKDYSC1 *blokdysc,BLOKDYSC1 *blokdysc2)
{	
ifstream f("F1.txt", ios::in);
ifstream f2("F2.txt", ios::in);
ofstream out("I.txt",ios::out);
char _KodDysc[20];
char _NazvDysc[20];
float _ObsCred;
int _KodCycl;
int _NomKaf;
char _KodDysc2[20];
char _NazvDysc2[20];
float _ObsCred2;
int _KodCycl2;
int _NomKaf2;
int n=0;
int m=0;
while(!f.eof())
{		
f>>_KodDysc>>_NazvDysc>>_ObsCred>>_KodCycl>>_NomKaf;	 
blokdysc[n].SetKodDysc(_KodDysc);
blokdysc[n].SetNazvDysc(_NazvDysc);		 
blokdysc[n].SetObsCred(_ObsCred);	
blokdysc[n].SetKodCycl(_KodCycl);
blokdysc[n].SetNomKaf(_NomKaf);
n++;
}	
n-=1;
while(!f2.eof()){
f2>>_KodDysc2>>_NazvDysc2>>_ObsCred2>>_KodCycl2>>_NomKaf2;
blokdysc2[m].SetKodDysc(_KodDysc2);
blokdysc2[m].SetNazvDysc(_NazvDysc2);
blokdysc2[m].SetObsCred(_ObsCred2);
blokdysc2[m].SetKodCycl(_KodCycl2);
blokdysc2[m].SetNomKaf(_NomKaf2);

m++;
}
m-=1;
f.close();
f2.close();

for(int i=0; i<n; i++){
for(int j=0; j<n; j++){	
out<<blokdysc[i].GetKodDysc()<<" "<<blokdysc[i].GetNazvDysc()<<" "<<blokdysc[i].GetObsCred()<<" "<<blokdysc[i].GetKodCycl()<<" "<<blokdysc[i].GetNomKaf()<<'\n';
if(blokdysc[i].GetKodCycl()!=blokdysc2[j].GetKodCycl() && blokdysc[i].GetNomKaf()!=blokdysc2[j].GetNomKaf() ){	
out<<blokdysc2[j].GetKodDysc()<<" "<<blokdysc2[j].GetNazvDysc()<<" "<<blokdysc2[j].GetObsCred()<<" "<<blokdysc2[j].GetKodCycl()<<" "<<blokdysc2[j].GetNomKaf()<<'\n';	//вот это неудачная попытка организовать запрос. выводит полную чушь	 

}
}		


}
out.close();
}

int _tmain(int argc, _TCHAR* argv[])
{
SetConsoleOutputCP(1251);
SetConsoleCP(1251);
BLOKDYSC1 blokdysc[10];
BLOKDYSC1 blokdysc2[10];
char KodDysc[20];
char NazvDysc[20];
float ObsCred;
int KodCycl;
int NomKaf;
cout<<"Введіть дані до таблиці BLOKDYSC1"<<endl;
for(int i=0; i<2; i++)
{
cout<<"Введіть код дисципліни ";
cin>>KodDysc;
blokdysc[i].SetKodDysc(KodDysc);
cout<<"Введіть назву дисципліни ";
cin>>NazvDysc;
blokdysc[i].SetNazvDysc(NazvDysc);
cout<<"Введіть код циклу ";
cin>>KodCycl;
blokdysc[i].SetKodCycl(KodCycl);
cout<<"Введіть номер кафедри ";
cin>>NomKaf;
blokdysc[i].SetNomKaf(NomKaf);
cout<<"Введіть обсяг кредитів ";
cin>>ObsCred;
blokdysc[i].SetObsCred(ObsCred);


}


cout<<"Введіть дані до таблиці BLOKDYSC2"<<endl;
for(int i=0; i<3; i++)
{
cout<<"Введіть код дисципліни ";
cin>>KodDysc;
blokdysc2[i].SetKodDysc(KodDysc);
cout<<"Введіть назву дисципліни ";
cin>>NazvDysc;
blokdysc2[i].SetNazvDysc(NazvDysc);
cout<<"Введіть код циклу ";
cin>>KodCycl;
blokdysc2[i].SetKodCycl(KodCycl);
cout<<"Введіть номер кафедри ";
cin>>NomKaf;
blokdysc2[i].SetNomKaf(NomKaf);
cout<<"Введіть обсяг кредитів ";
cin>>ObsCred;
blokdysc2[i].SetObsCred(ObsCred);


}

for(int i=0; i<2; i++)
{
blokdysc[i].print();

}

for(int i=0; i<3; i++)
{
blokdysc2[i].print();
}




File(blokdysc,"F1.txt", 2);
File(blokdysc2,"F2.txt", 3);
FileRead(blokdysc,blokdysc2);


system("pause");


return 0;
}
 

lazybiz

Well-known member
03.11.2010
1 339
0
#2
есть у меня две таблицы надо организвать запрос типа union (sql)
есть у меня две бутылки пива надо организовать распитие обоих на двоих (балтика №7)

Что за БД ? Или в роли нее файл?
Где программа работает не так? Или где не работает и надо поправить?

Суметь написать то, что написали вы, по-моему сложнее чем ответить на ваш вопрос.