[英]MySQL query returns more rows than intended, how do i only return the highest value of one column from each group?
该查询需要返回“ sheet_ID”列的每组中具有“ revision”列最高值的所有行。 当我不执行OR语句但我需要能够使用它们时,它会很好地工作。 输入字段用于“项目编号”,or语句需要从可能的10列中拉出该编号。
这是我的查询语句:
SELECT item_no, item_no1, item_no2, item_no3, item_no4, item_no5, item_no6,
item_no7, item_no8, item_no9, style, vendor_code, pgc, buyer, brand,
product_name, sheet_ID, revision, id
FROM product_sheets
WHERE item_no LIKE '$value' or item_no1 LIKE '$value' or
item_no2 LIKE '$value' or item_no3 LIKE '$value' or
item_no4 LIKE '$value' or item_no5 LIKE '$value' or
item_no6 LIKE '$value' or item_no7 LIKE '$value' or
item_no8 LIKE '$value' or item_no9 LIKE '$value' AND
revision IN (SELECT MAX(revision)
FROM product_sheets
GROUP BY sheet_ID
);
代替这个:
revision IN (SELECT MAX(revision)
FROM product_sheets
GROUP BY sheet_ID
);
您需要一个相关的子查询。 就您而言,您可以将其编写为:
revision = (SELECT MAX(ps2.revision)
FROM product_sheets ps2
WHERE ps2.sheet_ID = product_sheets.sheet_ID
);
但是,我强烈建议您在外部查询中使用表别名。
您还需要在以下where
修复括号:
WHERE (item_no LIKE '$value' or item_no1 LIKE '$value' or
item_no2 LIKE '$value' or item_no3 LIKE '$value' or
item_no4 LIKE '$value' or item_no5 LIKE '$value' or
item_no6 LIKE '$value' or item_no7 LIKE '$value' or
item_no8 LIKE '$value' or item_no9 LIKE '$value'
) AND
revision = (SELECT MAX(ps2.revision)
FROM product_sheets ps2
WHERE ps2.sheet_ID = product_sheets.sheet_ID
);
如果$value
不使用通配符,则更简单地写为:
where '$value' in (item_no, item_no1, item_no2, . . .) and
revision = (SELECT MAX(ps2.revision)
FROM product_sheets ps2
WHERE ps2.sheet_ID = product_sheets.sheet_ID
);
并且,除了有关规范化的注释(强烈建议)外,您还需要学习有关使用查询参数将值传递给查询的知识。
因此必须将日方括号or
条件,没有他们只有最后一个条件item_no9 LIKE '$value'
与一个与运营商相关的IN
条件。
WHERE (item_no LIKE '$value' or item_no1 LIKE '$value' or
item_no2 LIKE '$value' or item_no3 LIKE '$value' or
item_no4 LIKE '$value' or item_no5 LIKE '$value' or
item_no6 LIKE '$value' or item_no7 LIKE '$value' or
item_no8 LIKE '$value' or item_no9 LIKE '$value'
)
另外,将IN
条件更改为以下内容。
您不希望不是与其sheet_ID的最大修订版匹配的修订版与另一个sheet_ID的最大修订版匹配。
AND (sheet_ID,revision) IN (SELECT sheet_ID,MAX(revision)
FROM product_sheets
GROUP BY sheet_ID
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.