Solved

mysql left join

Posted on 2015-02-19
14
121 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
  • 5
  • 3
  • 3
  • +1
14 Comments
 
LVL 82

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 34

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 82

Expert Comment

by:Dave Baldwin
ID: 40620481
o.itemOptions = op.optionID will never match because they are different 'types'.
0
 
LVL 142

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 6

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 142

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
Do You Know the 4 Main Threat Actor Types?

Do you know the main threat actor types? Most attackers fall into one of four categories, each with their own favored tactics, techniques, and procedures.

 
LVL 6

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 142

Expert Comment

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

Author Comment

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

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 34

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 34

Expert Comment

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

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

What Is Threat Intelligence?

Threat intelligence is often discussed, but rarely understood. Starting with a precise definition, along with clear business goals, is essential.

Join & Write a Comment

Suggested Solutions

Foreword In the years since this article was written, numerous hacking attacks have targeted password-protected web sites.  The storage of client passwords has become a subject of much discussion, some of it useful and some of it misguided.  Of cou…
As a database administrator, you may need to audit your table(s) to determine whether the data types are optimal for your real-world data needs.  This Article is intended to be a resource for such a task. Preface The other day, I was involved …
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…
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…

757 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

Need Help in Real-Time?

Connect with top rated Experts

22 Experts available now in Live!

Get 1:1 Help Now