我有一个我需要解决的问题:我有三个与内连接连接的表。但是在这个名为"products","shopping cart","purchase"
的三个表中,我需要进行左连接以获得未在商店系统中购买的用户列表。
为此我尝试在实体"products" -> "shopping cart"
中进行左连接,之后我尝试了内部加入beetwen购买和购物车
RESULT?没有人(系统忽略了请求)。
我的目标是在给定的时间间隔内返回所有购买而非用户未付款的商品。
为了简化所有,我附上我的数据库副本和照片。
SELECT prodotti.nome_prodotto, carrello.quantita, acquisto.data_acquisto
FROM ( subquery.prodotti prodotti
LEFT JOIN subquery.carrello carrello
ON (prodotti.id_prodotto = carrello.id_prodotto))
JOIN subquery.acquisto acquisto
ON (acquisto.id_acquisto = carrello.id_acquisto)
我尝试过这个解决方案:
SELECT prodotti.nome_prodotto, acquisto.data_acquisto, carrello.quantita
FROM ( prodotti
LEFT JOIN carrello
ON prodotti.id_prodotto = carrello.id_prodotto )
INNER JOIN acquisto
ON acquisto.id_acquisto = carrello.id_acquisto
和
SELECT prodotti.nome_prodotto, acquisto.data_acquisto, carrello.quantita
FROM ( acquisto
INNER JOIN carrello
ON acquisto.id_acquisto = carrello.id_acquisto)
LEFT JOIN prodotti
ON prodotti.id_prodotto = carrello.id_prodotto
但没有...我返回一个像内连接
的结果P.S:你可以在那里找到数据库和toad文件的副本
答案 0 :(得分:0)
在LEFT JOIN
之后尝试执行INNER JOIN
。
答案 1 :(得分:0)
编辑:在阅读完您的评论后,我更加了解这个问题 - 听起来您正试图查看购物车中的商品数据,但尚未购买X时间量。
要执行此操作,LEFT JOIN
purchase
表,然后使用WHERE
子句将结果限制为特定的时间差异。由于我们使用的是左连接,因此购买表并不总是有值,因此在这些情况下我们使用IFNULL
来指定今天的数学日期(如果购物车中的商品仍然没有购买,弄清楚从今天开始的多少天。)
SELECT /*products in cart*/
prodotti.nome_prodotto
,carrello.quantita
FROM
prodotti
INNER JOIN carrello
ON prodotti.id_prodotto = carrello.id_prodotto
LEFT JOIN acquisto
ON acquisto.id_prodotto = carrello.id_prodotto
WHERE
/* show only items over a certain age - 5 days in this example */
DATEDIFF((ifnull(acquisto.id_acquisto,NOW()) /* use today's date if purchase doesn't exist */
- carrello.id_acquisto) > 5)