MySQL подзапрос, чтобы получить список идентификаторов из одной таблицы для запроса второй таблицы
У меня есть две таблицы, одна products
и один salesRecords
Я использую этот запрос:
SELECT
DAY(FROM_UNIXTIME(saleDate)) as day,
MONTH(FROM_UNIXTIME(saleDate)) as mnth,
YEAR(FROM_UNIXTIME(saleDate)) as yr,
COUNT(id) as invCount, SUM(quantity) as qty
FROM salesRecords WHERE itemNo IN
(SELECT GROUP_CONCAT(convert(id, CHAR(8))) as ids FROM products WHERE brand =100 GROUP by brand)
GROUP BY
mnth, yr
ORDER BY saleDate
Таблица продуктов содержит все, что мне нужно знать о продукте, а salesRecords содержит такие данные, как saleDate, проданное количество, предоставленные скидки и т. Д., Поэтому я пытаюсь достичь списка продаж для всех продуктов с идентификатором бренда. 100
по месяцам и годам из поля Unix Time с именем saleDate
Это работает, но очень медленно.
Кто-нибудь может посоветовать более быстрый способ сделать это?
Если я вручную вставлю список идентификаторов в запрос, он, кажется, будет работать быстрее, поэтому мне следует выполнить два запроса?
1 ответ
Я переписал ваш запрос с помощью одного внутреннего соединения. Попробуйте и вернитесь с новостями:
SELECT
DAY(FROM_UNIXTIME(saleDate)) as day,
MONTH(FROM_UNIXTIME(saleDate)) as mnth,
YEAR(FROM_UNIXTIME(saleDate)) as yr,
COUNT(id) as invCount,
SUM(quantity) as qty
FROM salesRecords s inner join
products on s.itemNo = p.id
WHERE
p.brand =100
GROUP BY
`day`, mnth, yr
ORDER BY
saleDate
Кроме того, чтобы избежать оговорки, вы можете поставить ограничение в on
операция:
...
SUM(quantity) as qty
FROM salesRecords s inner join
products on p.brand =100 and s.itemNo = p.id
GROUP BY
...