Оставьте соединение с INNER JOIN в SQL - PullRequest
0 голосов
/ 05 марта 2012

У меня есть вопрос, который мне нужно решить: у меня есть три таблицы, которые объединяются с помощью внутреннего соединения.Однако в этих трех таблицах, называемых "products","shopping cart","purchase", мне нужно выполнить левое объединение, чтобы получить списки пользователей, которые не купили в системе магазина.

Для этого я попытался выполнить левое объединение всущность "products" -> "shopping cart" и после этого я попробовал внутреннее соединение между корзиной покупок и покупок

РЕЗУЛЬТАТ?Ничего одного (система игнорирует запрос).

Моя цель - вернуть все покупки НЕ ФАКТЫ пользователями за определенный промежуток времени.

Для пояснения всего, я прилагаю копию моегоБаза данных с фотографией.

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

НО НИЧЕГО ... Я возвращаю результат как внутреннее соединение

PS: там вы можете найти копию базы данных и файл жабы

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

Ответы [ 2 ]

0 голосов
/ 05 марта 2012

РЕДАКТИРОВАТЬ : После прочтения вашего комментария я немного больше понимаю вопрос: похоже, вы пытаетесь просмотреть данные о товарах, которые есть в корзине, но не были куплены в 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) 
0 голосов
/ 05 марта 2012

Попробуйте сделать LEFT JOIN после всех ваших INNER JOIN с.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...