Topic: SELECT'as is triju lenteliu

yra trys lenteles pirmoj imones kodas, pavadinimas ir t.t. antroje irankio kodas, irankio pavadinimas ir t.t. trecioje rasosi duomenys apie paimtus irankius t.y. rasosi imones kodas, irankio kodas kuri paeme ir data. Kaip turetu atrodyti SELECT uzklausa kad rodytu imoniu pavadinimus, irankiu pavadinimus ir datas tu kurie yra paimti?

Re: SELECT'as is triju lenteliu

šioje temoje: http://www.mysql.lt/forumas/viewtopic.php?pid=764 pateikiau pavyzdį, kaip sujungti dvi lenteles per tarpinę lentelę ;) Jeigu nesigaus pritaikyti tada parašyk.

Re: SELECT'as is triju lenteliu

aha dekui ten kazka panasaus ir uzmaciau ko ir man reik :]

Re: SELECT'as is triju lenteliu

minde wrote:

šioje temoje: http://www.mysql.lt/forumas/viewtopic.php?pid=764 pateikiau pavyzdį, kaip sujungti dvi lenteles per tarpinę lentelę ;) Jeigu nesigaus pritaikyti tada parašyk.

panaudojau viena pavyzdi bet rekia apie sintakses klaida ilgai as ten spoksojau bet jos nepamaciau o uzklausa atrode mazdaug taip:

SELECT Imones.Pavadinimas, Irankiai.Pavadinimas, Nuoma.KadaPaimtas FROM Imones
INNER JOIN Irankiai ON Irankiai.Numeris = Nuoma.Numeris
INNER JOIN Nuoma ON Nuoma.Kodas = Imones.Kodas

Re: SELECT'as is triju lenteliu

Canis_Lupus wrote:

panaudojau viena pavyzdi bet rekia apie sintakses klaida ilgai as ten spoksojau bet jos nepamaciau o uzklausa atrode mazdaug taip:

SELECT Imones.Pavadinimas, Irankiai.Pavadinimas, Nuoma.KadaPaimtas FROM Imones
INNER JOIN Irankiai ON Irankiai.Numeris = Nuoma.Numeris
INNER JOIN Nuoma ON Nuoma.Kodas = Imones.Kodas

O kodėl neparodai klaidos pranešimo? ;)

Beto, pas tave lentelės jungiamos pagal svetimus parametrus. Tikriausiai turėtų atrodyti kažkaip taip:

SELECT Imones.Pavadinimas, Irankiai.Pavadinimas, Nuoma.KadaPaimtas
FROM Imones
   INNER JOIN Nuoma ON Imones.Kodas = Nuoma.Kodas
   INNER JOIN Irankiai ON Irankiai.Numeris = Nuoma.Numeris

Re: SELECT'as is triju lenteliu

Na siaip as bendrauju su delphi ir uzklausas rasau naudodamas ADOQuery komponentus todel ten ir nelabai raso kokia ta klaida. Ir siaip ar cia skirtumas yra tarp mano uzklausos ir taviskes?

Re: SELECT'as is triju lenteliu

Canis_Lupus rašė:

    Na siaip as bendrauju su delphi ir uzklausas rasau naudodamas ADOQuery komponentus todel ten ir nelabai raso kokia ta klaida. Ir siaip ar cia skirtumas yra tarp mano uzklausos ir taviskes?

Kad ir su kuo programuodamas klaidos pranešimus turi gi galėti matyti. Taip pat ir debuginti. Kitu atveju praktiškai sunku suvokti kaip iš viso programuoji.

Kalbant apie SQL tai nesu matęs nei vieno vizualinio užklausų dizainerio, kuris leistų kurti sudėtingesnes užklausas - todėl pasomokyti SQL'ą dirbant su duombazėmis būtina.

Skyrtumas tarp užklausų yra.

Re: SELECT'as is triju lenteliu

na butina tai butina tik kad nera kada o ir patirtis geriausia igijama per praktika. Perdariau uzklausa kaip uzrases vistiek tas pats sintakses klaida ir ismeta visa select sakini taip ir neaisku ant ko stringa

Re: SELECT'as is triju lenteliu

Tai vesk užklausą tiesiai į duombazę.

Re: SELECT'as is triju lenteliu

minde wrote:

Tai vesk užklausą tiesiai į duombazę.

Na kaip ir sakei duombaze is access'o exportavau i mysql'a ant delphi jau jokios klaidos nemeta bet neisveda visiskai jokiu rezultatu meginau taip pat vest tiesiai i duombaze irgi tas pats. Ir siaip keista, dvi visiskai vienodods duomenu bazes viena access'o kita mysql'ine uzklausa ta pati ant vienos klaida meta ant kitos ne. Na o ta klaida tai atrodo tai: Syntax error (missing operator) in query expression 'Imones.Kodas = IrankiuNuoma.Kodas INNER JOIN Irankiai ON Irankiai.Numeris = IrankiuNuoma.Numeris'

Re: SELECT'as is triju lenteliu

Canis_Lupus wrote:
minde wrote:

Tai vesk užklausą tiesiai į duombazę.

Na kaip ir sakei duombaze is access'o exportavau i mysql'a ant delphi jau jokios klaidos nemeta bet neisveda visiskai jokiu rezultatu meginau taip pat vest tiesiai i duombaze irgi tas pats. Ir siaip keista, dvi visiskai vienodods duomenu bazes viena access'o kita mysql'ine uzklausa ta pati ant vienos klaida meta ant kitos ne. Na o ta klaida tai atrodo tai: Syntax error (missing operator) in query expression 'Imones.Kodas = IrankiuNuoma.Kodas INNER JOIN Irankiai ON Irankiai.Numeris = IrankiuNuoma.Numeris'

Jeigu vedant užklausą tiesiai į duombazę nemeta jokios klaidos ir negrąžina rezultaų - vadinasi viskas gerai - nėra nei rezultatų nei klaidos. O sintaksės klaidą meta ant access'o? Jeigu taip, tai pasidomėk Ms Acess'o SQL'o niuansais ;) Juk nesitiki, kad SQL'as visur vienodai išpildytas ir vienodai interpretuojamas?

Re: SELECT'as is triju lenteliu

Aha klaida meta ant access'o :] na jo girdejau ausies krasteliu kad ten kazkas kitaip... na dzin, bet vistiek kodel jokiu rezultatu neisveda yra imone ir jos kodas yra irankis ir jo numeris o trecioj yra tos imones kodas ir to irankio numeris + dar data kazkokia tai turetu parodyti ta irasa, taip?

Re: SELECT'as is triju lenteliu

Canis_Lupus wrote:

Aha klaida meta ant access'o :] na jo girdejau ausies krasteliu kad ten kazkas kitaip... na dzin, bet vistiek kodel jokiu rezultatu neisveda yra imone ir jos kodas yra irankis ir jo numeris o trecioj yra tos imones kodas ir to irankio numeris + dar data kazkokia tai turetu parodyti ta irasa, taip?

Nebūtinai. Parodyk visų trijų lentelių duomenis, schemas ir pačią užklausą. Tada nereikės spelioti.

14 (edited by Canis_Lupus 2007-01-17 08:18:47)

Re: SELECT'as is triju lenteliu

Ok grysiu vakare namo parodysiu :] na o dabar klausimas ne i tema, situacija tokia yra du kompai abiejuose sukasi mysql'as ir abiejuose tokia pati duombaze su lentele kur yra rajonu kodai bei patys rajonai ir miestai. Vianame kompe miestu pavadinimus rodo gerai t.y. su visomis lt raidemis o kitame ne, rodo tik š ir ž kitu nerodo ta prasme klaustukus visokius rodo, pakeist pakeiti bet kai vel prisijungi ir vel tik klaustukus matai. Kame cia fieles? Gal del versijos? Viename versija yra 5.0.27-community-nt o antrame 4.1.20-community-nt

Re: SELECT'as is triju lenteliu

Тa šiame forume jau N kartų buvo klausinėjama, kaip atvaizduoti lietuviškas raides. Gali rasti keletą nurodymu kaip viską teisingai susidelioti.

Toliau užduodant klausimą tai praleidai porą labai svarbių dalykų: apie kokią koduotę kalbama. Svarbi yra koduotė naudojama tiek prisijungimui prie duomenų bazės tiek atvaizduojant duomenis tiek tai, kokia yra stulpelio koduotė.

Re: SELECT'as is triju lenteliu

O kaip keist tas koduotes naudojant sqlyog? Rodos visur issniukstinejau bet niekur neradau

Re: SELECT'as is triju lenteliu

Konkrečių tam tiktų programų funkcijų tai tikrai nežinau - reikia jau skaityti tos programos dokumentacijoje ar kreitis į tos programos palaikymą.

Visada gali naudotis SQL'u: http://dev.mysql.com/doc/refman/4.1/en/alter-table.html

Re: SELECT'as is triju lenteliu

Na su koduotem susitvarkiau:] na o tu lenteliu schema tokia

SET NAMES utf8;

SET SQL_MODE='';

create database if not exists `perfonus`;

USE `perfonus`;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO';

/*Table structure for table `imones` */

DROP TABLE IF EXISTS `imones`;

CREATE TABLE `imones` (
  `Pavadinimas` varchar(200) collate latin1_general_ci default NULL,
  `PVM` varchar(100) collate latin1_general_ci NOT NULL,
  `Kodas` varchar(50) collate latin1_general_ci NOT NULL,
  `Adresas` varchar(255) collate latin1_general_ci default NULL,
  `Telefonas` varchar(50) collate latin1_general_ci default NULL,
  `Astovauja` varchar(50) collate latin1_general_ci default NULL,
  PRIMARY KEY  (`PVM`,`Kodas`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

/*Data for the table `imones` */

insert into `imones` (`Pavadinimas`,`PVM`,`Kodas`,`Adresas`,`Telefonas`,`Astovauja`) values ('Saraskino kontora','1234567','7777777','Toli','911',NULL);

/*Table structure for table `irankiai` */

DROP TABLE IF EXISTS `irankiai`;

CREATE TABLE `irankiai` (
  `Irankis` varchar(200) collate latin1_general_ci default NULL,
  `Verte` double default NULL,
  `Numeris` int(11) NOT NULL,
  `Eksplotacija` datetime default NULL,
  PRIMARY KEY  (`Numeris`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

/*Data for the table `irankiai` */

insert into `irankiai` (`Irankis`,`Verte`,`Numeris`,`Eksplotacija`) values ('Sudo maisykle',0,666,NULL);

/*Table structure for table `irankiunuoma` */

DROP TABLE IF EXISTS `irankiunuoma`;

CREATE TABLE `irankiunuoma` (
  `Numeris` int(11) NOT NULL,
  `Kodas` varchar(50) collate latin1_general_ci NOT NULL,
  `Paimtas` datetime NOT NULL,
  PRIMARY KEY  (`Numeris`,`Kodas`,`Paimtas`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

/*Data for the table `irankiunuoma` */

insert into `irankiunuoma` (`Numeris`,`Kodas`,`Paimtas`) values (17,'7777777','2006-08-27 15:00:00');

SET SQL_MODE=@OLD_SQL_MODE;

o pati uzklausa tokia:

SELECT Imones.Pavadinimas, Irankiai.Irankis, IrankiuNuoma.Paimtas FROM Imones INNER JOIN IrankiuNuoma ON Imones.Kodas = IrankiuNuoma.Kodas INNER JOIN Irankiai ON Irankiai.Numeris = IrankiuNuoma.Numeris

Re: SELECT'as is triju lenteliu

Tai viskas gerai ;) Pas tave lenteleje Irankiai įrankio numeris yra 17, o lentelėje IrankiuNuoma numeris jau 666 - todėl nevyksta sujungimas.

Re: SELECT'as is triju lenteliu

Na nenorejau cia grust visus irasus tai turbut pamirsau pakeist :] bet zinau kad irasius 666 vietoj 17 vistiek rezultato norimo nebus