开发者

Unknow Column when using join on

I've been working through issues that resulted from using Join-Ons instead of comma joins. My SQL currently looks like this:

SELECT islandID AS parentIslandID, islandName, island.longDesc, 
imageLocation, COUNT(resort.resortID) AS totalResorts, resort.resortID 
FROM island, resort, images 
join resort as r1 
on island.islandID = resort.parentIslandID 
where 
r1.resortID IN ( 
59,62,65,69,71,72,74,75,76,82,86,89,91,93,95,105, 
106,11开发者_JAVA百科6,117,118,120,121,122,123,124,125,126,127, 
131,145,146,150,157,159,160,167,170,174,176,185,188,189,193, 
194,198,199,200,203,205,213,217 
) 
&& resort.active = '-1' 
GROUP BY resort.parentIslandID 
ORDER BY totalResorts DESC 

When executed, I get the following error:

#1054 - Unknown column 'island.islandID' in 'on clause'

I did some research and understand the origin of the error however I've tried to correct the issue by creating an alias for the "island" table. When I do this, columns like "island.longDesc" are then "unknown".

If anyone could correct what seems to be a minor syntax problem I would greatly appreciate it.

Images Structure:
CREATE TABLE `images` (
  `imageID` int(11) NOT NULL auto_increment,
  `imageType` int(11) NOT NULL COMMENT 'used to tell if its for an artist, header image, etc.',
  `parentObjectID` int(11) NOT NULL COMMENT 'used to tell what island/resort the image applies to',
  `imageLocation` text NOT NULL,
  `largeImageLocation` text NOT NULL,
  `imageLinkLabel` text NOT NULL,
  `imageURL` text NOT NULL,
  PRIMARY KEY  (`imageID`)
)

Island Structure:
CREATE TABLE `island` (
  `islandID` int(11) NOT NULL auto_increment,
  `islandName` text NOT NULL,
  `shortDesc` text NOT NULL,
  `longDesc` text NOT NULL,
  `getTo` text NOT NULL,
  `getAround` text NOT NULL,
  `photoInfo` text NOT NULL,
  `flowerInfo` text NOT NULL,
  `musicInfo` text NOT NULL,
  `cakeInfo` text NOT NULL,
  `activityInfo` text NOT NULL,
  `wedCoord` text NOT NULL,
  `regs` text NOT NULL,
  `climate` text NOT NULL,
  `languageID` int(11) NOT NULL,
  `currencyID` int(11) NOT NULL,
  `wideAccept` int(11) NOT NULL,
  `passportReq` int(11) NOT NULL,
  `picture` text NOT NULL,
  `daysSearchable` int(11) NOT NULL,
  `active` tinyint(1) NOT NULL,
  PRIMARY KEY  (`islandID`)
)

Resort Structure:
CREATE TABLE `resort` (
  `resortID` int(11) NOT NULL auto_increment,
  `resortName` text NOT NULL,
  `parentIslandID` int(11) NOT NULL,
  `longDesc` text NOT NULL,
  `website` text NOT NULL,
  `genBooking` text NOT NULL,
  `eventCoord` text NOT NULL,
  `amenInfo` text NOT NULL,
  `roomInfo` text NOT NULL,
  `coordInfo` text NOT NULL,
  `localeInfo` text NOT NULL,
  `spaInfo` text NOT NULL,
  `roomPrice` text NOT NULL,
  `maxGuests` text NOT NULL,
  `picture` text NOT NULL,
  `search_Inclusive` int(11) NOT NULL,
  `search_resortType` int(11) NOT NULL,
  `search_onBeach` int(11) NOT NULL,
  `search_wedCoord` int(11) NOT NULL,
  `search_roomRate` int(11) NOT NULL,
  `search_airportDist` int(11) NOT NULL,
  `search_HotelSuite` tinyint(1) NOT NULL,
  `search_VillaCondo` tinyint(1) NOT NULL,
  `search_Amenities` text NOT NULL,
  `active` tinyint(1) NOT NULL,
  PRIMARY KEY  (`resortID`)
)


You are mixing two different types of JOIN syntax - the implicit type where tables are listed in FROM, and the explicit JOIN type. Instead, try:

SELECT
   islandID AS parentIslandID,
   islandName, 
   island.longDesc, 
   imageLocation,
   COUNT(r1.resortID) AS totalResorts, 
   r1.resortID 
FROM island
  JOIN resort r1 ON island.islandID = r1.parentIslandID 
  JOIN images ON island.islandID = images.parentObjectID 
WHERE 
  r1.resortID IN ( 
    59,62,65,69,71,72,74,75,76,82,86,89,91,93,95,105, 
    106,116,117,118,120,121,122,123,124,125,126,127, 
    131,145,146,150,157,159,160,167,170,174,176,185,188,189,193, 
    194,198,199,200,203,205,213,217 
  ) 
AND resort.active = '-1' 
GROUP BY r1.parentIslandID 
ORDER BY totalResorts DESC 

**Edited to include island JOIN after table structure was posted.

Additionally:

  • MySQL uses AND rather than && for boolean AND
  • Table aliases do not need the AS keyword (JOIN resort r1)
  • Be sure to use your resort alias r1 in the select list (r1.resortID)
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜