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

Тема в разделе "C/C++/C#", создана пользователем -, 18 окт 2011.

  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;
    }
     
  2. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    есть у меня две бутылки пива надо организовать распитие обоих на двоих (балтика №7)

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

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

Поделиться этой страницей