Я пытаюсь вытащить уникальные электронные письма с соответствующими идентификаторами в двух таблицах.
SELECT line_items.order_id, line_items.id, orders.email, orders.name
FROM orders INNER JOIN
line_items
ON orders.id = line_items.order_id
WHERE line_items.order_id IN (SELECT DISTINCT email FROM orders WHERE status = 0 AND created_at BETWEEN '2018-01-10' AND NOW() )
LIMIT 50;
Я знаю, что моя ошибка основана на том факте, что line_items.order_is является INT, и поэтому параметр IN ищет другой столбец int для сопоставления. Тем не менее, я не уверен, как изменить это, чтобы получить правильные результаты. Всем приветствуется всяческая помощь.
Я пытаюсь вытащить уникальные электронные письма с соответствующими идентификаторами в двух таблицах.
Если вы имеете в виду разные электронные письма, то ваш подзапрос будет выглядеть следующим образом:
SELECT DISTINCT o.email
FROM o.orders
WHERE o.status = 0 AND o.created_at BETWEEN '2018-01-10' AND NOW();
Поскольку заказ должен иметь хотя бы одну позицию, я не понимаю, почему эта таблица необходима.
Ваш запрос подходит для ответа на вопрос: "Вытяните все заказы на электронные письма, которые сделали недавний заказ со статусом 0". Если это то, что вы хотите:
SELECT li.order_id, li.id, o.email, o.name
FROM orders o INNER JOIN
line_items li
ON o.id = li.order_id
WHERE o.email IN (SELECT o2.email FROM orders o2 WHERE o2.status = 0 AND o2.created_at BETWEEN '2018-01-10' AND NOW() )
LIMIT 50;
Трудно следовать, но я думаю, что вы хотите:
SELECT sub.order_id, sub.line_item_id, sub.email, o.name
FROM
(SELECT o.email, MIN(o.id) AS order_id, MIN(i.id) AS line_item_id
FROM orders o
INNER JOIN line_items i
ON o.id = i.order_id
WHERE o.status = 0
AND o.created_at BETWEEN '2018-01-10' AND NOW()
GROUP BY o.email) sub
LEFT JOIN orders o
ON sub.order_id = o.id
В подзапросе выберите каждое электронное письмо вместе с идентификатором первого заказа и идентификатором позиции. Затем присоединитесь к ним, чтобы заказывать имя заказа. Это предполагает, что MIN (line_item) будет отображаться с MIN (order_id) для каждого электронного письма, поэтому вы должны будете сообщить мне, если это не является допустимым предположением.