Avatar billede haolan Nybegynder
16. september 2008 - 09:15 Der er 4 kommentarer og
1 løsning

The used SELECT statements have a different number of columns

Som titlen siger..

Hvad betyder den fejl?

Jeg får den i forbindelse med en rimelig avanceret stored procedure.
Skriv hvis der er noget kode i skal se..
Avatar billede arne_v Ekspert
16. september 2008 - 09:39 #1
Det lyder som en UNION mellem nogle SELECT som returnerer et forskelligt antal kolonner.

Det kan man ikke.
Avatar billede haolan Nybegynder
16. september 2008 - 09:44 #2
Vores stored procedure ser sådan ud:

CREATE DEFINER=`root`@`%` PROCEDURE `createCow`(IN inputAnimalId BIGINT, IN inputFarmId INT, IN inputTransferDate DATE)
BEGIN
    DECLARE number INT;
    DECLARE isTransfered INT;

    SELECT COUNT(*) INTO number FROM cow WHERE `animalID` = inputAnimalId;

    IF number = 0 THEN
            INSERT INTO cow (`animalID`) VALUES (inputAnimalId);
            INSERT INTO Farm_has_cow (`Farm_FarmId`, `cow_animalID`, `cowTransferDate`, `cowLiveHere`) VALUES (inputFarmId, inputAnimalId, inputTransferDate, 1);
    ELSE
      SELECT `cowLiveHere` AS thisCowLiveHere, `cowTransferDate` AS thisCowTransferDate, COUNT(*) INTO isTransfered FROM Farm_has_cow WHERE `Farm_FarmId` = inputFarmId AND `cow_animalId` = inputAnimalId AND `cowLiveHere` = 1 GROUP BY `cowLiveHere`;

      IF isTransfered = 1 AND inputTransferDate < thisCowTransferDate THEN
              UPDATE Farm_has_cow SET `cowTransferDate` = inputTransferDate WHERE `cow_animalID` = inputAnimalId AND `Farm_farmId` = inputFarmId;
      ELSE
              UPDATE Farm_has_cow SET `cowLiveHere` = 0 WHERE `cow_animalID` = inputAnimalId AND `Farm_farmId` = inputFamId AND thisCowLiveHere = 1;
              INSERT INTO Farm_has_cow (`Farm_FarmId`, `cow_animalID`, `cowTransferDate`, `cowLiveHere`) VALUES (inputFarmId, inputAnimalId, inputTransferDate, 1);
      END IF;
    END IF;
END

Som du kan se er der ingen union.. Har du andre forslag?
Avatar billede arne_v Ekspert
16. september 2008 - 09:54 #3
Hvis jeg skulle gaette, saa ville jeg tro at:

      SELECT `cowLiveHere` AS thisCowLiveHere, `cowTransferDate` AS thisCowTransferDate, COUNT(*) INTO isTransfered FROM Farm_has_cow WHERE `Farm_FarmId` = inputFarmId AND `cow_animalId` = inputAnimalId AND `cowLiveHere` = 1 GROUP BY `cowLiveHere`;

mangler INTO paa de foerste to fields.
Avatar billede haolan Nybegynder
16. september 2008 - 09:59 #4
Hvis jeg laver dem om til INTO istedet for AS, skriver den undeclared istedet. selvom jeg har declared dem i toppen ligesom isTransfered.
Avatar billede haolan Nybegynder
16. september 2008 - 10:39 #5
Fandt ud af at hvis jeg laver dem med INTO skal der self stå som:  tbl1, tbl2 INTO val1, val2 FROM... istedet, så nu virker det :)
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