Hello,

could someone help me please to construct correct query or tell me what I'm 
doing wrong?

I have three tables:
table products
table products_codes where some products could have assigned another additional 
codes 
table products_prices
I want to get all rows from product_prices listed  with product Description and 
Code for particular CodeType

And here is the create script, sample data and the query:

CREATE TABLE  `products` (
  `ID` int(10) unsigned NOT NULL auto_increment,
  `Description` varchar(50) NOT NULL default '',
  `Units` varchar(10) NOT NULL default '',
  PRIMARY KEY  (`ID`)
) ENGINE=InnoDB;

INSERT INTO products VALUES(NULL, "Product 1", "lt");
INSERT INTO products VALUES(NULL, "Product 2", "lt");
INSERT INTO products VALUES(NULL, "Product 3", "lt");

CREATE TABLE  `products_codes` (
  `Product_ID` int(10) unsigned NOT NULL default '0',
  `Code` varchar(50) NOT NULL default '',
  `CodeType` tinyint NOT NULL default '',
  PRIMARY KEY  (`Product_ID`,`CodeType`)
) ENGINE=InnoDB;

INSERT INTO products_codes VALUES(1, "ABC", 1);
INSERT INTO products_codes VALUES(2, "XYZ", 1);

CREATE TABLE  `products_prices` (
  `Product_ID` int(10) unsigned NOT NULL default '0',
  `StartDate` datetime NOT NULL default '0000-00-00 00:00:00',
  `Price` double NOT NULL default '0',
  PRIMARY KEY  (`Product_ID`,`StartDate`)
) ENGINE=InnoDB;

INSERT INTO products_prices VALUES(1, '20050901000000', 20);
INSERT INTO products_prices VALUES(1, '20051001000000', 25);
INSERT INTO products_prices VALUES(1, '20051101000000', 30);
INSERT INTO products_prices VALUES(2, '20051001000000', 15);
INSERT INTO products_prices VALUES(3, '20051001000000', 10);

SELECT p.Description, p.ID, pp.Product_ID, pc.Code, pp.StartDate FROM 
products_prices pp
INNER JOIN (products p
    LEFT JOIN products_codes pc ON p.ID = pc.Product_ID AND pc.CodeType = 1)
ON p.ID = pp.Product_ID
where StartDate < Now()
ORDER BY p.ID, pp.StartDate desc

Here is the result of the query:
"Description","ID","Product_ID","Code","StartDate"

"Product 1",1,3,NULL,"2005-10-01 00:00:00"
"Product 1",1,1,"ABC","2005-10-01 00:00:00"
"Product 1",1,2,NULL,"2005-10-01 00:00:00"
"Product 1",1,1,"ABC","2005-09-01 00:00:00"
"Product 2",2,2,"XYZ","2005-10-01 00:00:00"
"Product 2",2,3,NULL,"2005-10-01 00:00:00"
"Product 2",2,1,NULL,"2005-10-01 00:00:00"
"Product 2",2,1,NULL,"2005-09-01 00:00:00"
"Product 3",3,2,NULL,"2005-10-01 00:00:00"
"Product 3",3,3,NULL,"2005-10-01 00:00:00"
"Product 3",3,1,NULL,"2005-10-01 00:00:00"
"Product 3",3,1,NULL,"2005-09-01 00:00:00"

I don't know why this query returns also rows where p.ID != pp.ProductID


And another thing. If I remove from selected columns pp.Product_ID query 
returns error:
Column 'Product_ID' in field list is ambiguous (ErrorNr. 1052). Why??

MySQL 4.1.14, WinXP

Thanks a lot in advance for any help



Kind regards,
Dusan Pavlica

Reply via email to