Henrikn00 8
Postad: 22 jun 17:40

Problem med två SQL frågor

Hej, 

Behöver hjälp med två programmeringsfrågor i SQL, kommer bifoga bilder på frågorna och hur svaret ska bli och hur jag kodat det. Det blir fel av någon anledning. Uppskattar hjälp!

Fråga1:

Jag har kodat det som: 

SELECT Products.ProductID, Products.ProductName, Categories.CategoryName, Products.QuantityPerUnit, Products.UnitPrice, Products.UnitsInStock, Products.UnitsOnOrderFROM ProductsINNER JOIN Categories ON Products.CategoryID = Categories.CategoryIDORDER BY Products.UnitPrice DESC;

Men blir fel error meddelande: 

No value given for one or more required parameters. 

Fråga 2: 

Har kodat som: 

SELECT DISTINCT CustomerNameFROM CustomersJOIN Orders ON Customers.CustomerID = Orders.CustomerIDJOIN Shippers ON Orders.ShipperID = Shippers.ShipperIDWHERE Shippers.ShipperName = 'Speedy Express'ORDER BY CustomerName;

Men blir Syntax ERROR.

 

Vet någon vad jag gör fel för? Tack!

thedifference 373
Postad: 22 jun 18:30 Redigerad: 22 jun 18:31

På den andra så misstänker jag att den inte vet vilken tabell den ska plocka CustomerName från. Du har ju tre tabeller inblandade via dina joins.

Ser inte något fel med den första, men prova att bygga ditt query gradvis. T.ex. börja med

SELECT * FROM Products INNER JOIN Categories on Products.CategoryID = Categories.CategoryID

och se om den klagar. Gör den inte det så fortsätt förfina det.

Laguna Online 30471
Postad: 22 jun 19:50

Ska du ha DESC där i första queryn?

Dani163 1035
Postad: 22 jun 21:32 Redigerad: 22 jun 21:33
Henrikn00 skrev:

Det låter inte rimligt ... har du kanske kopierat och klistrat koden från någonstans, och det finns osynliga karaktärer som ställer till det?

Koden ser bra ut och bör inte ge de fel du anger att de gör. Nämligen dessa:

SELECT Products.ProductID, Products.ProductName, Categories.CategoryName, Products.QuantityPerUnit, Products.UnitPrice, Products.UnitsInStock, Products.UnitsOnOrder
FROM Products
INNER JOIN Categories ON Products.CategoryID = Categories.CategoryID
ORDER BY Products.UnitPrice DESC;

Och

SELECT DISTINCT CustomerName
FROM Customers
JOIN Orders ON Customers.CustomerID = Orders.CustomerID
JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID
WHERE Shippers.ShipperName = 'Speedy Express'
ORDER BY CustomerName;
sictransit Online 1071 – Livehjälpare
Postad: 23 jun 16:37 Redigerad: 23 jun 16:39

Välkommen till Pluggakuten!

Jag vet inte hur din databas ser ut, men din fråga utgår ifrån att alla produkter har en kategori.  Det är säkert rätt men annars skulle jag föreslå en "LEFT OUTER JOIN".

Dessutom är alias för tabeller bra för läsligheten, så använd dem:

SELECT p.ProductID, p.ProductName, c.CategoryName, p.QuantityPerUnit, p.UnitPrice, p.UnitsInStock, p.UnitsOnOrder
FROM Products p
INNER JOIN Categories c ON p.CategoryID = c.CategoryID
ORDER BY p.UnitPrice DESC;
Henrikn00 8
Postad: 24 jun 14:43
Dani163 skrev:
Henrikn00 skrev:

Det låter inte rimligt ... har du kanske kopierat och klistrat koden från någonstans, och det finns osynliga karaktärer som ställer till det?

Koden ser bra ut och bör inte ge de fel du anger att de gör. Nämligen dessa:

SELECT Products.ProductID, Products.ProductName, Categories.CategoryName, Products.QuantityPerUnit, Products.UnitPrice, Products.UnitsInStock, Products.UnitsOnOrder
FROM Products
INNER JOIN Categories ON Products.CategoryID = Categories.CategoryID
ORDER BY Products.UnitPrice DESC;

Och

SELECT DISTINCT CustomerName
FROM Customers
JOIN Orders ON Customers.CustomerID = Orders.CustomerID
JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID
WHERE Shippers.ShipperName = 'Speedy Express'
ORDER BY CustomerName;

Det blir bara fel och står att den inte kan hitta eller Syntax error. Du ser inget som kan vara fel?

Henrikn00 8
Postad: 24 jun 14:43
sictransit skrev:

Välkommen till Pluggakuten!

Jag vet inte hur din databas ser ut, men din fråga utgår ifrån att alla produkter har en kategori.  Det är säkert rätt men annars skulle jag föreslå en "LEFT OUTER JOIN".

Dessutom är alias för tabeller bra för läsligheten, så använd dem:

SELECT p.ProductID, p.ProductName, c.CategoryName, p.QuantityPerUnit, p.UnitPrice, p.UnitsInStock, p.UnitsOnOrder
FROM Products p
INNER JOIN Categories c ON p.CategoryID = c.CategoryID
ORDER BY p.UnitPrice DESC;

Sorry! Ska testa det.

Tack!

Henrikn00 8
Postad: 24 jun 14:44
Laguna skrev:

Ska du ha DESC där i första queryn?

Det borde man väl ha? Kan testa att ta bort.

Henrikn00 8
Postad: 24 jun 14:45
thedifference skrev:

På den andra så misstänker jag att den inte vet vilken tabell den ska plocka CustomerName från. Du har ju tre tabeller inblandade via dina joins.

Ser inte något fel med den första, men prova att bygga ditt query gradvis. T.ex. börja med

SELECT * FROM Products INNER JOIN Categories on Products.CategoryID = Categories.CategoryID

och se om den klagar. Gör den inte det så fortsätt förfina det.

Får försöka men tycker att båda ser bra ut. Mycket märkligt att det blir error.

Henrikn00 skrev:

Jag har kodat det som: 

SELECT Products.ProductID, Products.ProductName, Categories.CategoryName, Products.QuantityPerUnit, Products.UnitPrice, Products.UnitsInStock, Products.UnitsOnOrderFROM ProductsINNER JOIN Categories ON Products.CategoryID = Categories.CategoryIDORDER BY Products.UnitPrice DESC;

Men blir fel error meddelande: 

No value given for one or more required parameters. 

Jag hittade din databas och konstaterade rätt raskt att du försöker hämta kolumner som inte finns. 

Det här fungerar utmärkt:

SELECT p.ProductName, p.Unit, p.Price, c.CategoryName, c.Description
FROM Products p
INNER JOIN Categories c ON p.CategoryID=c.CategoryID
ORDER BY p.Price DESC;

... och ger följande resultat:

Varifrån fick du QuantityPerUnit, UnitPrice, UnitsInStock och UnitsOnOrder?

Henrikn00 8
Postad: 30 jun 13:26
sictransit skrev:
Henrikn00 skrev:

Jag har kodat det som: 

SELECT Products.ProductID, Products.ProductName, Categories.CategoryName, Products.QuantityPerUnit, Products.UnitPrice, Products.UnitsInStock, Products.UnitsOnOrderFROM ProductsINNER JOIN Categories ON Products.CategoryID = Categories.CategoryIDORDER BY Products.UnitPrice DESC;

Men blir fel error meddelande: 

No value given for one or more required parameters. 

Jag hittade din databas och konstaterade rätt raskt att du försöker hämta kolumner som inte finns. 

Det här fungerar utmärkt:

SELECT p.ProductName, p.Unit, p.Price, c.CategoryName, c.Description
FROM Products p
INNER JOIN Categories c ON p.CategoryID=c.CategoryID
ORDER BY p.Price DESC;

... och ger följande resultat:

Varifrån fick du QuantityPerUnit, UnitPrice, UnitsInStock och UnitsOnOrder?

Tack så hjärtligt! Skulle du kunna hjälpa mig med den andra frågan också?

För att svara på din fråga så vet jag inte riktigt, men det var ett försök att fixa till ordningen per pris och antal. Men hjälpte inte så mycket.

Henrikn00 skrev:

Tack så hjärtligt! Skulle du kunna hjälpa mig med den andra frågan också?

För att svara på din fråga så vet jag inte riktigt, men det var ett försök att fixa till ordningen per pris och antal. Men hjälpte inte så mycket.

Ja, du kan ju inte göra SELECT mot kolumner som inte finns.

Just nu verkar den där sajten vara nere, men din SQL ser korrekt ut, givet att kolumnerna du hämtar och joinar på verkligen finns och tabellerna heter som det står. Med några alias för tabellerna kan den dock bli lite kortare och mer lättläst, i mina ögon.

Om din SQL verkligen ser som i din fråga förstår jag dock att du får fel, men det är förhoppningsvis bara för att du inte klistrat in den som kod. Annars saknas det radbrytningar eller åtminstone mellanslag lite här och var.

sictransit Online 1071 – Livehjälpare
Postad: 30 jun 16:25 Redigerad: 30 jun 16:26

Nu är sajten uppe igen. 

Jag får också syntaxfel med din kod, men förstår inte varför. Nu specade jag INNER JOIN istället, men det är säkert default ändå.

Skriver jag om frågan med en äldre joinsyntax så går den igenom:

SELECT DISTINCT 
	c.CustomerName
FROM 
	Customers c, Orders o, Shippers s
WHERE 
	c.CustomerID = o.CustomerID AND 
	o.ShipperID = s.ShipperID AND 
	s.ShipperName = 'Speedy Express'
ORDER BY 
	c.CustomerName;

(Notera hur läsligheten förbättras med alias för tabellerna, radbrytningar och några tabbar. Det är bra både för egen felsökning och för att andra skall förstå.)

Svara
Close