Avatar billede chris2k Nybegynder
27. august 2002 - 16:49 Der er 7 kommentarer og
2 løsninger

SQL Join query

Hejsa, jeg er kørt død i noget SQL, så jeg håber på hjælp...

Jeg skal lave en query som skal joine 2 tabeller. Jeg er ikke mester i joins, men har da lavet et par stykker.

De 2 tabeller vi skal arbejde med, hedder Articles og ArticleUpdates. ArticleUpdates refererer til Articles med et field der hedder ArticleID.

Det som jeg vil, er at jeg vil have den seneste opdaterings dato i ArticleUpdates, MEN også kunne spørge på nogle ting i Articles. Derfor et join...

Jeg har via Access lavet følgende:

SELECT ArticleUpdates.OldestArticleDate, Articles.ID
FROM Articles INNER JOIN ArticleUpdates ON Articles.ID = ArticleUpdates.ArticleID
WHERE ((([Articles].[DepartmentID])=90) AND ((ArticleUpdates.OldestArticleDate)>(Now()-12)));

Ja, de der brackets er fuckedup, men se om du kan overleve...

Det svære er så, at jeg kun vil have en row per Article, dvs. den seneste opdatering.

Håber på hjælp, og hvis jeg ikke har forklaret det godt nok, så stil endeligt spørgsmål... På forhånd tak.

//Christian
Avatar billede proaccess Nybegynder
27. august 2002 - 16:55 #1
SELECT Articles.ID, Max(ArticleUpdates.OldestArticleDate) AS Dato
FROM Articles INNER JOIN ArticlesUpdates ON Articles.ArticleID=ArticleUpdates.ArticleID
WHERE Articles.DepartmentID=90 AND ArticleUpdates.OldestArticleDate>Now()-12
GROUP BY Articles.ID;
Avatar billede neteffect Nybegynder
27. august 2002 - 16:55 #2
SELECT DISTINCT TOP 1 ArticleUpdates.OldestArticleDate, Articles.ID
FROM Articles INNER JOIN ArticleUpdates ON Articles.ID = ArticleUpdates.ArticleID
WHERE (([Articles].[DepartmentID])=90)
ORDER BY ArticleUpdates.OldestArticleDate DESC;
Avatar billede chris2k Nybegynder
27. august 2002 - 17:02 #3
neteffect:

Den giver mig en fejl...

mysql> SELECT DISTINCT TOP 1 ArticleUpdates.OldestArticleDate, Articles.ID FROM Articles INNER JOIN ArticleUpdates ON Articles.ID = ArticleUpdates.ArticleID WHERE Articles.Department=90 ORDER BY ArticleUpdates.OldestArticleDate DESC;
ERROR 1064: You have an error in your SQL syntax near '1 ArticleUpdates.OldestArticleDate, Articles.ID FROM Articles INNER JOIN Article' at line 1
mysql>
Avatar billede chris2k Nybegynder
27. august 2002 - 17:04 #4
proaccess:

Din virker fint, mange tak skal du have! I får lidt begge 2... Tak for den hurtige og professionelle response
Avatar billede proaccess Nybegynder
27. august 2002 - 17:05 #5
MySQL understøtter ikke TOP x - Der bruges derimod LIMIT 1 til sidst i SQL'en...

Har du kigget på mit forslag ???
Avatar billede neteffect Nybegynder
27. august 2002 - 17:37 #6
proaccess' forslag validerer pænt hos
http://developer.mimer.se/validator/parser92/index.tml
..men giver det kun én record tilbage?

Ligesom LIMIT er TOP heller ikke standard. Så lærte jeg dét!
Avatar billede chris2k Nybegynder
27. august 2002 - 18:13 #7
Hej igen, jeg har lige et ekstra spørgsmål:

Jeg var lidt uklar før, og det må i undskylde. Ud over at have en OldestArticleDate, har en ArticleUpdate også en EditedDate. Vi vil kun have den seneste EditedDate, men på samme tid have mulighed for at søge på OldestArticleDate.

Det har jeg forsøgt at fixe med følgende:

SELECT Articles.ID, ArticleUpdates.OldestArticleDate, Max(ArticleUpdates.EditedDate) AS OldestDate FROM Articles INNER JOIN ArticleUpdates ON Articles.ID=ArticleUpdates.ArticleID WHERE Articles.Department=90 AND ArticleUpdates.OldestArticleDate < '2002-12-11' GROUP BY Articles.ID ORDER BY ArticleUpdates.EditedDate DESC;

Men den giver ikke de rigtige resultater.... Gode råd?
Avatar billede budda Nybegynder
28. august 2002 - 20:06 #8
SELECT Articles.ID, ArticleUpdates.OldestArticleDate, Max(ArticleUpdates.EditedDate) AS OldestDate FROM Articles INNER JOIN ArticleUpdates ON Articles.ID=ArticleUpdates.ArticleID WHERE Articles.Department=90 AND ArticleUpdates.OldestArticleDate < '2002-12-11' GROUP BY Articles.ID ORDER BY ArticleUpdates.EditedDate DESC LIMIT 1;

Er det det ??
Avatar billede chris2k Nybegynder
28. august 2002 - 20:17 #9
Nej
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