Ja ditt huvudproblem är ju att du inte har koll på vad du joinar ihop. Och bortsett från de andra generella tipsen du fått så vill du inte ha några "OR" om det går att undvika...
Till att börja med behöver du rätt data:
Kod:
SELECT AL.Date, AL. MenuID, A.Header, A.Prize
FROM AdvertiseList AL, Advertise8 A
WHERE AdvertiseList.Id <> 0
AND AdvertiseList.MenuId = '8'
AND AL.AdvertiseId = A.Id
UNION
SELECT AL.Date, AL. MenuID, A.Header, A.Prize
FROM AdvertiseList AL, Advertise9 A
WHERE AdvertiseList.Id <> 0
AND AdvertiseList.MenuId = '9'
AND AL.AdvertiseId = A.Id
UNION
SELECT AL.Date, AL. MenuID, A.Header, A.Prize
FROM AdvertiseList AL, Advertise11 A
WHERE AdvertiseList.Id <> 0
AND AdvertiseList.MenuId = '11'
AND AL.AdvertiseId = A.Id
Sedan gäller det bara att fundera ut ett lämpligt sätt att sortera resultatet du får. Det är lite klurigare med tanke på att en UNION använts...
Outer joins borde fixa det också:
Kod:
SELECT *
FROM AdvertiseList AL
LEFT OUTER JOIN Advertise8 A8 ON AL.AdvertiseID = A8.ID
LEFT OUTER JOIN Advertise9 A9 ON AL.AdvertiseID = A9.ID
LEFT OUTER JOIN Advertise11 A11 ON AL.AdvertiseID = A11.ID
WHERE
AL. MenuId in (8,9,11)
Order by AL.Date
Om jag var du skulle jag nog bita i det sura äpplet. Din DB-design suger rent ut sagt. Antingen gör du ett script som fixar din DB så du kan få rätt data i en enkel fråga eller så hämtar du först ut det du ska ha ur AdvertiseList och gör sedan nya frågor för att hämta det du behöver i "utökningstabellerna".