在SQL中左连接INNER JOIN

时间:2012-03-05 17:45:51

标签: mysql sql

我有一个我需要解决的问题:我有三个与内连接连接的表。但是在这个名为"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文件的副本

http://www.ricetteingironelweb.it/Desktop.zip

2 个答案:

答案 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)