-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、qty 和 date。

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

4

4 回答 4

0

您的选择标准 WHERE([stock.]date BETWEEN '2012-04-10' AND '2012-07-16')使其有效地成为 RIGHT JOIN,只有在日期范围内有/有股票的记录才会显示。如果您想显示所有产品而不考虑库存,则需要将 OR [stock.]date IS NULL 添加到您的选择标准。

于 2012-07-17T17:51:52.903 回答
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 表示无论有无库存都返回产品,我认为通过此查询,您将获得两行。

于 2012-07-17T17:38:42.913 回答
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'

如果没有找到产品,产品名称将为 NULL。

于 2012-07-17T17:38:47.723 回答
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
于 2012-07-17T17:41:23.753 回答