Robert Saylor
asked on
mysql left join
Not sure why I am getting this error. I have done plenty of left joins before. Maybe I need a fresh set of eyes.
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 ;
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`
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 ;
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
o.itemOptions = op.optionID will never match because they are different 'types'.
please do not match JOIN with "non-join" syntax
also, please start to use aliases in your queries (as shown by the above comments)
https://www.experts-exchange.com/Database/Miscellaneous/A_11135-Why-should-I-use-aliases-in-my-queries.html
also, please start to use aliases in your queries (as shown by the above comments)
https://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'
ASKER
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.
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'
Error: #1054 - Unknown column 'orders.itemOptions' in 'on clause'
ASKER
This should be closed or deleted. I did not get a solid answer to my question.
how did you solve your issue, then?
ASKER
Guy I did not solve it. I wish my question to be removed.
ASKER
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.
I did not get the answer I need and I will have to re-write this query.
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.
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.
Sorry, that should have been an objection.
ASKER
Please let this close GUY ok. Like I said the first time I accept this as the issue.
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.