Avatar billede hurra Novice
27. oktober 2004 - 18:09 Der er 3 kommentarer og
1 løsning

subquery (måske)

Jeg har nogle data til at stå i to tabeller. Dataen repræsentere nogle ting jeg har testet på, for at kunne skelne data, har jeg et serial nummer på tingene i dataserne.

Nu vil jeg så gerne ha talt hvormange forskellige enheder der optræder i de to tabeller, og hvilken tabel de først optræser i.

Jeg kunne godt tænke mig hvis nedenstående virkede, men det gør det desværre ikke:
SELECT * FROM (
( SELECT `Time if test`, `EID`,`DUT SERIAL`, (1) FROM `test ok` )
UNION
( SELECT `Time if test`, `EID`,`DUT SERIAL`, (0) FROM `test fail` ) ) ORDER BY `Time if test` GROUP BY `DUT SERIAL`

I stedet for har jeg lavet dette script der gør det samme som jeg havde ønsket ovenstående havde gjort:
CREATE TEMPORARY TABLE `temp`
(
`Time of test` TIMESTAMP,
`EID` INT NOT NULL,
`DUT SERIAL`  INT NOT NULL,
`pass`  INT NOT NULL
);

INSERT INTO `temp` (`Time of test`, `EID`, `DUT SERIAL`, `pass`)
SELECT `Time of test`, `EID`,`DUT SERIAL`, (1) FROM `test ok` ;

INSERT INTO `temp` (`Time of test`, `EID`, `DUT SERIAL`, `pass`)
SELECT `Time of test`, `EID`,`DUT SERIAL`,(0) FROM `test fail` ;

CREATE TEMPORARY TABLE `temp2`
(
`Time of test` TIMESTAMP,
`EID` INT NOT NULL,
`DUT SERIAL`  INT NOT NULL,
`pass`  INT NOT NULL
);

INSERT INTO `temp2` (`Time of test`, `EID`, `DUT SERIAL`, `pass`)
SELECT `Time of test`, `EID`, `DUT SERIAL`,`pass` FROM `temp` ORDER BY `Time of test` ;

SELECT * FROM `temp2` GROUP BY `DUT SERIAL`

Efter min mening er det øverste exempel noget kun det smarste, bortset fra det ikke virker, og det gør det nederste. Jeg er også træt af at der skulle være nødvendig at lave to midlertidige tabeller for at få det til at virke.

Er der nogen der kan pynte lidt på det for mig ?
ps. Jeg bruger mysql ver 4.0.2
Avatar billede Slettet bruger
27. oktober 2004 - 20:39 #1
Hvad med:

( SELECT `Time if test`, `EID`,`DUT SERIAL`, (1) FROM `test ok` )
UNION
( SELECT `Time if test`, `EID`,`DUT SERIAL`, (0) FROM `test fail` )
ORDER BY `Time if test` GROUP BY `DUT SERIAL`
Avatar billede hurra Novice
28. oktober 2004 - 09:48 #2
Ideen er meget god, men jeg har nu også prøvet det der. Jeg fåer en fejl hvis jeg sætter ORDER før GROUP. Er det bare fordi det er en ældre version af mysql jeg bruger ?
Avatar billede hossein Nybegynder
28. oktober 2004 - 10:10 #3
ORDER BY skal komme efter GROUP BY:

GROUP BY `DUT SERIAL` ORDER BY `Time if test`

vh
Hossein
Avatar billede Slettet bruger
28. oktober 2004 - 22:39 #4
Derudover burde mit forslag virke. Eventuelt med aliaser på de valgte felter.

( SELECT `Time of test` AS tid, `EID` AS eid,`DUT SERIAL` AS dut, (1) AS pass FROM `test ok` )
UNION
( SELECT `Time of test`, `EID`,`DUT SERIAL`, (0) FROM `test fail` )
GROUP BY dut ORDER BY tid

NB! Det er kun navne i den første SELECT, der er afgørende.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester