2012-07-17 67 views
-1
SELECT product.pname,stock.pid,stock.qty,stock.rate 
FROM product,stock 
WHERE (date BETWEEN '2012-04-10' AND '2012-07-16') AND product.pid=stock.pid 

这是我的sql查询,但问题是执行此查询时显示单个结果意味着我的产品表包含pid和pname,库存表包含pid,rate,数量和日期。查询两个日期

我想在两个日期之间显示记录。
我的查询与两条记录匹配。但是当我添加“AND product.pid = stock.pid”时,它只显示1条记录。
我想从库存表的pid方面的产品表中显示产品名称。

+1

左连接? SELECT product.pname,stock.pid,stock.qty,stock.rate FROM产品LEFT JOIN股票ON product.pid = stock.pid WHERE(日期'2012-04-10'和'2012-07-16')AND product.pid = stock.pid – mask8 2012-07-17 17:36:04

+0

更好地书写您的文字描述。 – 2012-07-17 17:38:14

回答

0

可能有些产品不在库存中。此外,我建议你做一个JOIN这样的:

SELECT product.pname,stock.pid,stock.qty,stock.rate 
FROM product 
LEFT JOIN 
stock 
ON product.pid=stock.pid 
WHERE (date BETWEEN '2012-04-10' AND '2012-07-16') 

我使用LEFT JOIN,这意味着如果有或者也没有股票收益型产品不管,我觉得这个查询,你会得到两行。

+0

丹尼尔·阿兰加:我想你会发现WHERE子句仍然会使它等价于RIGHT JOIN – 2012-07-17 17:54:12

0

首先设法得到它的工作没有加入:

SELECT stock.pid, stock.qty, stock.rate 
FROM stock 
WHERE stock.date BETWEEN '2012-04-10' AND '2012-07-16' 

如果这样的作品,然后使用一个外加入将信息添加到每一行不删除任何行。

SELECT product.pname, stock.pid, stock.qty, stock.rate 
FROM stock 
LEFT JOIN product ON product.pid=stock.pid 
WHERE stock.date BETWEEN '2012-04-10' AND '2012-07-16' 

如果找不到产品,产品名称将为空。

0

尝试下面的查询。

SELECT product.pname,stock.pid,stock.qty,stock.rate 
FROM product,stock 
WHERE stock.date BETWEEN '2012-04-10' AND '2012-07-16' AND product.pid=stock.pid 
0

你的选择标准 WHERE([股票]日之间 '2012-04-10' 和 '2012-07-16') 使得有效RIGHT JOIN,只有那些记录/内有现货日期范围将被显示。如果您想要显示所有产品而不考虑库存,则需要将OR [库存]日期IS NULL添加到您的选择标准。