MySQL将带UNION的查询更改为不带UNION的查询
我如何才能将此查询更改为一个查询,而不使用联合或子查询?允许加入 问题在于,某些产品在MySQL将带UNION的查询更改为不带UNION的查询,mysql,Mysql,我如何才能将此查询更改为一个查询,而不使用联合或子查询?允许加入 问题在于,某些产品在group\u code列中使用一个值进行分组。这意味着在查询结果中只应返回一个。我使用的是Doctrine querybuilder,无法使用联合查询或子查询。 我尝试通过执行两个查询并将结果与PHP结合来解决这个问题。但是当我尝试对结果进行分页时,我会说limit2,这将返回4个结果,因为两个查询都将得到2个结果 询问 通缉结果: 桌子 资料 这将给你同样的结果。但是查询有点冒险,因为您正在分组而不是聚合结
group\u code
列中使用一个值进行分组。这意味着在查询结果中只应返回一个。我使用的是Doctrine querybuilder,无法使用联合查询或子查询。我尝试通过执行两个查询并将结果与PHP结合来解决这个问题。但是当我尝试对结果进行分页时,我会说limit2,这将返回4个结果,因为两个查询都将得到2个结果 询问 通缉结果: 桌子 资料
这将给你同样的结果。但是查询有点冒险,因为您正在分组而不是聚合结果
SELECT *
FROM product
GROUP BY COALESCE(group_code, id)
ORDER BY 1 LIMIT 0,
2
您应该能够在这样的原则中使用原始sql<代码>$this->getDoctrine()->getManager();->getConnection()->prepare($sql)代码>@RaymondNijland,是的,但在这部分代码中,我需要使用QueryBuilder。这不支持原始查询。您支持此查询的目的是什么?@JanZeiseweis,我需要产品表中的所有记录,并且必须对具有相同组码的记录进行分组。分页也应该是可能的。您对风险部分的意思是什么?返回的内容始终取决于您将其插入表中的顺序。假设您有一个包含名称和街道的表,您运行
按名称从名称组中选择名称,街道
如果您有两次相同的名称,您将返回一条街道,但您不知道实际上有另一条街道具有相同的名称。
id | title | group_code
------------------------------------
1 | t-shirt blue | t-shirt
4 | t-shirt with image | NULL
CREATE TABLE `product` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(100) DEFAULT NULL,
`group_code` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `product` (`id`, `title`, `group_code`)
VALUES
(1, 't-shirt blue', 't-shirt'),
(2, 't-shirt green', 't-shirt'),
(3, 't-shirt orange', 't-shirt'),
(4, 't-shirt with image', NULL),
(5, 'sweater', NULL),
(6, 'jumsuit', NULL);
SELECT *
FROM product
GROUP BY COALESCE(group_code, id)
ORDER BY 1 LIMIT 0,
2