[sql] kilka tabel -> jedna tabela
/\\/\\ichau Smoczyk - 13-11-2005 11:58
[sql] kilka tabel -> jedna tabela
Witam, mam bazę w MySQL i potrzebuję zrobić następującą rzecz -- zrzucić całą bazę do jednej tabeli. Jest to baza danych bibliograficznych z kilkunastoma tabelami zawierającymi wydawnictwa, miejsca wydania, nazwy czasopism i inne tego typu dane tekstowe. Główna tabela wygląda tak:
------------------------------------------------------------------- id autor rok tytul id_czasopisma id_wydawnictwo id_msc_wydania ------------------------------------------------------------------- 1 Nowak J. 1999 Blabla 3 1 34 -------------------------------------------------------------------
Wszystkie pola o naziwe z przedtostkiem id_ są typu int i są połączone relacyjnie z innymi tabelami, gdzie są pełne nazwy czasopism, wydawnictw etc. Chciałbym zrzucić wszystko do takiej tabeli, gdzie będą /pełne/ informacje, a nie tylko relacje:
------------------------------------------------------------------- id autor rok tytul id_czasopisma id_wydawnictwo id_msc_wydania ------------------------------------------------------------------- 1 Nowak J. 1999 Blabla Wprost PWN Warszawa -------------------------------------------------------------------
Potrzebne jest mi to, aby taką pełną tabelę wyeksportować do innej aplikacji. Proszę o pomoc lub podpowiedź, wskazówkę, SQL nie znam za bardzo, próbowałem z poleceniem SELECT, ale niewiele zdziałałem. Pozdrawiam,
-- /\/\ichau, msmoczyk [malpka] wp [kropa] pl http://www.nocnyrzepin.prv.pl
Rafal Zawadzki - 13-11-2005 11:58
[ciach], nie wiem czy pomogę ale:
> Potrzebne jest mi to, aby taką pełną tabelę wyeksportować do innej > aplikacji. Proszę o pomoc lub podpowiedź, wskazówkę, SQL nie znam za > bardzo, próbowałem z poleceniem SELECT, ale niewiele zdziałałem. > Pozdrawiam, >
mysql> select * from glowna; +----+--------+------+------------------+---------------+----------------+----------------+ | id | autor | rok | tytul | id_czasopisma | id_wydawnictwo | id_msc_wydania | +----+--------+------+------------------+---------------+----------------+----------------+ | 1 | Nowak | 2020 | Podroze w czasie | 1 | 1 | 2 | | 2 | Brutus | 20 | Londyn plonie | 2 | 2 | 1 | +----+--------+------+------------------+---------------+----------------+----------------+ 2 rows in set (0.00 sec)
mysql> select * from wydawnictwa; +----+-------------+ | id | name | +----+-------------+ | 1 | north press | | 2 | south press | +----+-------------+ 2 rows in set (0.00 sec)
mysql> select * from czasopisma; +----+----------+ | id | name | +----+----------+ | 1 | klamstwa | | 2 | szuje | +----+----------+ 2 rows in set (0.00 sec)
mysql> select * from miesiace; +----+---------+ | id | name | +----+---------+ | 1 | styczen | | 2 | luty | +----+---------+ 2 rows in set (0.00 sec)
mysql> mysql> describe docelowa; +----------------+-----------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------------+-----------+------+-----+---------+----------------+ | id | int(10) | | PRI | NULL | auto_increment | | autor | char(100) | YES | | NULL | | | rok | char(100) | YES | | NULL | | | tytul | char(100) | YES | | NULL | | | id_czasopisma | char(100) | YES | | NULL | | | id_wydawnictwo | char(100) | YES | | NULL | | | id_msc_wydania | char(100) | YES | | NULL | | +----------------+-----------+------+-----+---------+----------------+ 7 rows in set (0.00 sec)
mysql> mysql> select * from docelowa; Empty set (0.00 sec)
mysql> insert into docelowa (autor, rok, tytul, id_czasopisma, id_wydawnictwo, id_msc_wydania) (select autor, rok, tytul, czasopisma.name, miesiace.name, wydawnictwa.name from glowna, czasopisma, miesiace, wydawnictwa where id_czasopisma=czasopisma.id and id_msc_wydania=miesiace.id and id_wydawnictwo=wydawnictwa.id); Query OK, 2 rows affected (0.00 sec) Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from docelowa; +----+--------+------+------------------+---------------+----------------+----------------+ | id | autor | rok | tytul | id_czasopisma | id_wydawnictwo | id_msc_wydania | +----+--------+------+------------------+---------------+----------------+----------------+ | 3 | Nowak | 2020 | Podroze w czasie | klamstwa | luty | north press | | 4 | Brutus | 20 | Londyn plonie | szuje | styczen | south press | +----+--------+------+------------------+---------------+----------------+----------------+ 2 rows in set (0.00 sec)
mysql>
czy o to chodziło?
-- ă¤ăź
/\\/\\ichau Smoczyk - 13-11-2005 11:58
Rafal Zawadzki wrote:
> (select autor, rok, tytul, > czasopisma.name, miesiace.name, wydawnictwa.name from glowna, czasopisma, > miesiace, wydawnictwa where id_czasopisma=czasopisma.id and > id_msc_wydania=miesiace.id and id_wydawnictwo=wydawnictwa.id);
> czy o to chodziło?
Prawie, ale niestety nie do końca, dzięki za odzew. Powyższe zapytanie z całej mojej tabeli (ponad tysiąc rekordów) daje mi /tylko/ 2 rekordy. Otóż wybiera ono rekordy które spełniają WSZYSTKIE podane tam kryteria (operator AND). Ja w tabeli mam różne rekordy przedstawiające /różne/ typy publikacji: takie które nie mają wypełnionego pola id_czasopisma (bo są to ksiązki, rozdziały lub inne typy publikacji), id_wydawnictwo (bo są to artykuły z czasopism) itp.
Czy można to jakoś rozwiązać? Wpisanie OR zamiast AND daje /ogromną/ tabelę.
-- /\/\ichau, msmoczyk [malpka] wp [kropa] pl http://www.nocnyrzepin.prv.pl
Rafal Zawadzki - 13-11-2005 11:58
/\/\ichau Smoczyk wrote:
> Rafal Zawadzki wrote: > >> (select autor, rok, tytul, >> czasopisma.name, miesiace.name, wydawnictwa.name from glowna, czasopisma, >> miesiace, wydawnictwa where id_czasopisma=czasopisma.id and >> id_msc_wydania=miesiace.id and id_wydawnictwo=wydawnictwa.id); > >> czy o to chodziło? > > Prawie, ale niestety nie do końca, dzięki za odzew. > Powyższe zapytanie z całej mojej tabeli (ponad tysiąc rekordów) daje > mi /tylko/ 2 rekordy. Otóż wybiera ono rekordy które spełniają WSZYSTKIE > podane tam kryteria (operator AND). > Ja w tabeli mam różne rekordy przedstawiające /różne/ typy publikacji: > takie które nie mają wypełnionego pola id_czasopisma (bo są to ksiązki, > rozdziały lub inne typy publikacji), id_wydawnictwo (bo są to artykuły z > czasopism) itp. > > Czy można to jakoś rozwiązać? Wpisanie OR zamiast AND daje /ogromną/ > tabelę. >
select autor, rok, czasopisma.name, wydawnictwa.name from glowna left join czasopisma on czasopisma.id=glowna.id_czasopisma left join wydawnictwa on wydawnictwa.id=glowna.id_wydawnictwo;
i tak dalej z left join?
-- ă¤ăź
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
jak to =?ISO-8859-2?Q?zrobi=E6=2E=2E=2E=3F_TSQL_sql_server?==?ISO-8859-2?Q?_?=
Jak =?windows-1250?Q?pobra=E6_szacowan=B9_wielko=9C=E6_zbiory_wy nikowego_w_MS?==?windows-1250?Q?_SQL_2005=3F?=
=?iso-8859-2?Q?=5BMS_SQL=5D_Czy_mo=BFna_wywo=B3a=E6_funkcje_t ylko_raz_dla?==?iso-8859-2?Q?_ca=B3ego_zbioru_=BCr=F3d=B3owego=3F?=
[MSSQL] =?ISO-8859-2?Q?zgodno=B6ci_z_licencjami_Microsoft_?==?ISO-8859-2?Q?SQL_Server?=
=?ISO-8859-2?Q?k=B3opot_z_uruchomieniem_MY_SQL_dla_C?==?ISO-8859-2?Q?MS_i_CRM_na_Fedora_Core_3?=
Oracle PL/SQL Wstawianie =?ISO-8859-2?Q?wynik=F3w_kolekcji_d?==?ISO-8859-2?Q?o_tabeli?=
[MSSQL] ACCESS - SQL =?ISO-8859-2?Q?B=B3ad_w_konwersji_lic?==?ISO-8859-2?Q?zb?=
=?iso-8859-2?Q?=5Bmssql=5D_Zapytania_rekurencyjne__-_czy_sk=B3adnia_sql?==?iso-8859-2?Q?_co=B6_takiego_przewiduje_=3F?=
[Oracle PL/SQL] Cursor i zapis =?ISO-8859-2?Q?rekord=F3w_do_?==?ISO-8859-2?Q?kolejnych_plik=F3w?=
=?iso-8859-2?Q?=5BMySQL=5D_Co_minimalnie_potrzebne_zeby_mie=E 6_klienta_My?==?iso-8859-2?Q?SQL_na_Linuxie=3F?=
zanotowane.pldoc.pisz.plpdf.pisz.plmisida.pev.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|