patternMajor
Get multiple columns from a select subquery
Viewed 0 times
columnsgetsubquerymultipleselectfrom
Problem
SELECT
*,
p.name AS name,
p.image,
p.price,
(
SELECT ps.price
FROM product_special ps
WHERE p.id = ps.id
AND ps.date < NOW()
ORDER BY ps.priority ASC, LIMIT 1
) AS special_price,
(
SELECT ps.date
FROM product_special ps
WHERE p.id = ps.id
AND ps.date < NOW()
ORDER BY ps.priority ASC, LIMIT 1
) AS date
FROM product p LEFT JOIN product_special ps ON (p.id = ps.id)As you can see I'm repeating the same subquery just to get another column out. I'm wondering is there a better way of doing this?
id is the primary key in both tables. I've no problem making product_special.priority unique if that can help.
Solution
Assuming combination
product_special.id, product_special.priority is unique SELECT p.*, special_price,special_date
FROM product p
LEFT JOIN
(
SELECT ps.id, ps.price as special_price, ps.`date` as special_date
FROM product_special ps
INNER JOIN
(
SELECT id, MIN(priority) as min_priority
FROM product_special
GROUP BY id
) ps2
ON (ps2.id = ps.id)
)a ON (a.id=p.id)Code Snippets
SELECT p.*, special_price,special_date
FROM product p
LEFT JOIN
(
SELECT ps.id, ps.price as special_price, ps.`date` as special_date
FROM product_special ps
INNER JOIN
(
SELECT id, MIN(priority) as min_priority
FROM product_special
GROUP BY id
) ps2
ON (ps2.id = ps.id)
)a ON (a.id=p.id)Context
StackExchange Database Administrators Q#15976, answer score: 21
Revisions (0)
No revisions yet.