【发布时间】:2014-10-14 17:05:42
【问题描述】:
我在编写复杂的 SQL 查询时遇到了一些麻烦。我得到了我正在寻找的结果并且性能很好,但是每当我尝试为 product_groups 的 LEFT JOIN 抓取不同的行时,我要么遇到一些性能问题,要么得到不正确的结果。
这是我的查询:
SELECT
pl.name, pl.description,
p.rows, p.columns,
pr.sku,
m.filename, m.ext, m.type,
ptg.product_group_id AS group,
FROM
product_region AS pr
INNER JOIN
products AS p ON (p.product_id = pr.product_id)
INNER JOIN
media AS m ON (p.media = m.media_id)
INNER JOIN
product_language AS pl ON (p.product_id = pl.product_id)
LEFT JOIN
products_groups AS ptg ON (ptg.product_id = pr.product_id)
WHERE
(pl.lang = :lang) AND
(pr.region = :region) AND
(pt.product_id = p.product_id)
GROUP BY
p.product_id
LIMIT
:offset, :limit
我得到的结果是正确的,但是我只想为“组”返回不同的行。例如,我返回了许多具有相同“组”值的结果,但我只希望显示第一行,并省略以下具有相同组值的记录。
我尝试了 GROUP BY group 和 DISTINCT,但结果不正确。另请注意,组可以返回为 NULL,我不希望这些行受到影响。
提前致谢。
【问题讨论】:
-
你能给我们看一些数据吗?请阅读MY POST 询问 sql 问题...关于格式化 ascii 表的最佳实践和方法的提示和技巧.. 可能会有所帮助
-
如果您不关心返回哪一行,您可以使用
GROUP BY ptg. product_group_id而不是GROUP BY p.product_id。不过,您使用的是 MySQL 扩展,这显然是不受欢迎的 (dev.mysql.com/doc/refman/5.7/en/group-by-extensions.html)。 -
我试过了,由于某种原因它错误地将空值分组......
标签: mysql