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

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