Solved

mysql left join

Posted on 2015-02-19
14
127 Views
Last Modified: 2015-02-20
Not sure why I am getting this error. I have done plenty of left joins before. Maybe I need a fresh set of eyes.

SELECT
	`orders`.`itemOptions`,
	`products`.`product_id`,
	`products`.`product_number`,
	`products`.`title`,
	`products`.`price`
		
FROM
	`orders`,`products`

LEFT JOIN `options` on `orders`.`itemOptions` = `options`.`optionID`

WHERE
	`orders`.`orderID` = '113'
	AND `orders`.`itemsOrdered` = `products`.`product_id`

Open in new window


Error: #1054 - Unknown column 'orders.itemOptions' in 'on clause'

Schema:

CREATE TABLE IF NOT EXISTS `options` (
  `optionID` int(11) NOT NULL AUTO_INCREMENT,
  `name` text NOT NULL,
  PRIMARY KEY (`optionID`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;

CREATE TABLE IF NOT EXISTS `products` (
  `product_id` int(250) NOT NULL AUTO_INCREMENT,
  `cat_id` varchar(250) NOT NULL,
  `product_number` varchar(50) DEFAULT NULL,
  `title` varchar(250) NOT NULL,
  `text` text,
  `photo` varchar(250) DEFAULT NULL,
  `price` decimal(5,2) DEFAULT NULL,
  `options` text,
  `online` int(11) DEFAULT '0',
  `order` int(11) DEFAULT '0',
  `noShipping` int(11) DEFAULT '0',
  `noTax` int(11) DEFAULT '0',
  PRIMARY KEY (`product_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=101 ;

CREATE TABLE IF NOT EXISTS `orders` (
  `orderID` int(11) NOT NULL AUTO_INCREMENT,
  `f_name` varchar(30) DEFAULT '',
  `l_name` varchar(30) DEFAULT '',
  `email` text,
  `phone` varchar(20) DEFAULT '',
  `address` text,
  `address2` text,
  `city` varchar(30) DEFAULT '',
  `state` varchar(30) DEFAULT '',
  `zip` varchar(20) DEFAULT '',
  `s_address` text,
  `s_address2` text,
  `s_city` varchar(30) DEFAULT '',
  `s_state` varchar(30) DEFAULT '',
  `s_zip` varchar(20) DEFAULT '',
  `comments` text,
  `ship_comments` text,
  `cardName` text,
  `cardType` varchar(20) DEFAULT '',
  `cardNumber` varchar(30) DEFAULT '',
  `exp` varchar(20) DEFAULT '',
  `cvv` varchar(10) DEFAULT '',
  `costShipping` double DEFAULT NULL,
  `costTax` double DEFAULT NULL,
  `costDiscount` double DEFAULT NULL,
  `costTotal` double DEFAULT NULL,
  `itemsOrdered` text,
  `itemOptions` varchar(200) DEFAULT NULL,
  `itemsQuantity` text,
  `dateAdded` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`orderID`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=122 ;
0
Comment
Question by:Robert Saylor
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 3
  • 3
  • +1
14 Comments
 
LVL 83

Accepted Solution

by:
Dave Baldwin earned 500 total points
ID: 40620412
In `orders`.`itemOptions` = `options`.`optionID`, one is an int and the other is a 'varchar'.  I don't think that will work.  I think you can only compare items of the same type.
0
 
LVL 35

Expert Comment

by:gr8gonzo
ID: 40620469
Seems like maybe there's a typo in there somewhere. Simplify it down to using table aliases and lose the backticks:

SELECT
      o.itemOptions,
      p.product_id,
      p.product_number,
      p.title,
      p.price
FROM
      orders o,
      products p
LEFT JOIN options op ON o.itemOptions = op.optionID
WHERE
      o.orderID = 113
      AND o.itemsOrdered = p.product_id

I say this because you are already selecting orders.itemOptions in your SELECT statement, so if the error says the column doesn't exist, then it would have thrown the error on the SELECT portion first. So it sounds like there's some bad whitespace or something in there somewhere.
0
 
LVL 83

Expert Comment

by:Dave Baldwin
ID: 40620481
o.itemOptions = op.optionID will never match because they are different 'types'.
0
NEW Veeam Agent for Microsoft Windows

Backup and recover physical and cloud-based servers and workstations, as well as endpoint devices that belong to remote users. Avoid downtime and data loss quickly and easily for Windows-based physical or public cloud-based workloads!

 
LVL 143

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 40620606
please do not match JOIN with "non-join" syntax
also, please start to use aliases in your queries (as shown by the above comments)
http://www.experts-exchange.com/Database/Miscellaneous/A_11135-Why-should-I-use-aliases-in-my-queries.html

SELECT
	o.`itemOptions`,
	p.`product_id`,
	p.`product_number`,
	p.`title`,
	p.`price`
FROM 	`orders` o
JOIN `products` p
   ON  o.`itemsOrdered` =  p.`product_id`
LEFT JOIN `options` op on  o.`itemOptions` =  op.`optionID`
WHERE 	o.`orderID` = '113'
                                  

Open in new window

0
 
LVL 7

Author Comment

by:Robert Saylor
ID: 40620992
Thanks, I understand the issue now with the data type. I will most likely have to write it as a nested query now but that is life.
0
 
LVL 143

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 40621060
I agree that this may be some issue, but not the explanation to the error provided:

Error: #1054 - Unknown column 'orders.itemOptions' in 'on clause'
0
 
LVL 7

Author Comment

by:Robert Saylor
ID: 40621185
This should be closed or deleted. I did not get a solid answer to my question.
0
 
LVL 143

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 40621200
how did you solve your issue, then?
0
 
LVL 7

Author Comment

by:Robert Saylor
ID: 40621222
Guy I did not solve it. I wish my question to be removed.
0
 
LVL 7

Author Comment

by:Robert Saylor
ID: 40621278
I've requested that this question be deleted for the following reason:

I did not get the answer I need and I will have to re-write this query.
0
 
LVL 35

Expert Comment

by:gr8gonzo
ID: 40621276
Please do not close the question with a simple "re-write" self solution. Part of this whole process is that someone else will come along with the same question and if they find your question and answer, it will help them out. If you delete it, that help goes away with all of the above effort.

Dave's original answer #40620412 is 100% correct. I tried it out on a local test database and that is indeed the resulting error message (a bizarre error message for that problem, but it's true). So please accept his answer as the solution and then you can re-write the query.
0
 
LVL 35

Expert Comment

by:gr8gonzo
ID: 40621279
Sorry, that should have been an objection.
0
 
LVL 7

Author Comment

by:Robert Saylor
ID: 40621309
Please let this close GUY ok. Like I said the first time I accept this as the issue.
0

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Does the idea of dealing with bits scare or confuse you? Does it seem like a waste of time in an age where we all have terabytes of storage? If so, you're missing out on one of the core tools in every professional programmer's toolbox. Learn how to …
Since pre-biblical times, humans have sought ways to keep secrets, and share the secrets selectively.  This article explores the ways PHP can be used to hide and encrypt information.
Learn how to match and substitute tagged data using PHP regular expressions. Demonstrated on Windows 7, but also applies to other operating systems. Demonstrated technique applies to PHP (all versions) and Firefox, but very similar techniques will w…
The viewer will learn how to look for a specific file type in a local or remote server directory using PHP.

737 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question