Как я могу изменить мой запрос MySQL, чтобы включить строки, для которых внутреннее соединение не может найти совпадение? - PullRequest
0 голосов
/ 27 марта 2012

Я сейчас использую запрос:

SELECT
q1.item AS q1item,q1.store AS q1store,q1.marion AS q1marion,
q1.carbondale AS q1carbondale,q2.marion AS q2marion,q2.carbondale AS q2carbondale
FROM jdgower_items q1
INNER JOIN jdgower_items q2 ON q1.item=q2.item
AND q1.store_id=q2.store_id AND DATE(q1.datetime) = DATE(NOW())
AND DATE(q2.datetime) = DATE(NOW() - INTERVAL 1 DAY)
WHERE q1.store_id='$the_main_store_id' OR q1.competitor_id='$the_main_store_id'
ORDER BY q1.item ASC,q1.competitor_id ASC,q1.store DESC,q1.store_id ASC

По сути, идея состоит в том, чтобы получить по одному предмету в ряду с сегодняшней ценой и вчерашней ценой ... вместе со всеми конкурентами, которых я отслеживаю, с их соответствующими ценами. Это дает мне именно то, что я хочу, пока я не добавлю нового конкурента ... если у этого конкурента нет записи на вчерашний день, ничего не возвращается для этого конкурента в цикле. Я почти уверен, что это как-то связано с INNER JOIN в строке «AND DATE (q2.datetime) = DATE (NOW () - INTERVAL 1 DAY)», но я не уверен, как это исправить. Заранее благодарю за любую помощь!

Ответы [ 2 ]

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

В зависимости от того, что вы ищете, попробуйте LEFT JOIN, если не получилось, попробуйте RIGHT JOIN

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

А как насчет использования LEFT JOIN вместо INNER JOIN?Таким образом, у вас будут некоторые результаты с NULL для q2 полей, но у вас будут строки.

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