phpmyadmin 在mysql查询中得到错误的结果

izj3ouym  于 2022-11-09  发布在  PHP
关注(0)|答案(1)|浏览(146)

我做了一个电子商务模型的数据库。
到目前为止,一切看起来都很好,但当我执行一些查询时,我得到错误的结果
我做了一个SQLFIDDLE,所以你可以看看它
当我这样做

SELECT produkt_name, shipping_date 
FROM product, shipping 
WHERE shipping_date BETWEEN '2019-01-01' AND '2021-12-31'

我希望
| 产品名称|发货日期|
| - -|- -|
| 优雅的Ballkleid| 2019年10月22日|
| 科隆测试仪采样1(10 Flaschen)|2020年7月11日|
| 玻璃层:长濑|2021年12月7日|
但我得到这个,这基本上是每一个可能的产品与所有现有的发货日期存在于数据库中。包括产品甚至没有出售,直到2022年。
| 产品名称|发货日期|
| - -|- -|
| 优雅的Ballkleid| 2020年7月11日|
| 荷鲁斯异端收藏版|2020年7月11日|
| 玻璃层:长濑|2020年7月11日|
| 优雅的Ballkleid| 2019年10月22日|
| 荷鲁斯异端收藏版|2019年10月22日|
| 玻璃层:长濑|2019年10月22日|
| 优雅的Ballkleid| 2021年12月7日|
| 荷鲁斯异端收藏版|2021年12月7日|
| 玻璃层:长濑|2021年12月7日|
| 科隆测试仪采样1(10 Flaschen)|2020年7月11日|
| 科隆测试仪采样1(10 Flaschen)|2019年10月22日|
| 科隆测试仪采样1(10 Flaschen)|2021年12月7日|
请帮我找出问题所在。可能是数据库设计本身的问题,但我真的找不出问题出在哪里或如何解决。

dauxcl2d

dauxcl2d1#

首先,不要使用笛卡尔连接,因为它通常会导致错误的结果,而且你需要连接产品,订单,发票和发货来得到你的结果:

SELECT product.produkt_name, shipping.shipping_date
FROM product
join product_order on product_order.fk_produkt_id=product.product_id
join invoice on invoice.fk_order_id=product_order.order_id
join shipping on shipping.fk_invoice_id=invoice.invoice_id
WHERE shipping.shipping_date BETWEEN '2019-01-01' AND '2021-12-31'

你也可以用另一种方法,从shipping开始,这取决于你是否有很多shipping,两个查询都返回相同的结果。

SELECT product.produkt_name, shipping.shipping_date
from shipping
join invoice  on shipping.fk_invoice_id=invoice.invoice_id
join product_order on invoice.fk_order_id=product_order.order_id
join product on product_order.fk_produkt_id=product.product_id
WHERE shipping.shipping_date BETWEEN '2019-01-01' AND '2021-12-31'

相关问题