MySQL用UNION更改查询,无需查询

时间:2017-08-31 12:19:09

标签: mysql

如何在不使用 UNION 子查询的情况下将此查询更改为一个查询?允许加入。

问题是某些产品与group_code列中的值组合在一起。这意味着在查询结果中只应返回一个。我正在使用Doctrine querybuilder,我无法使用union或子查询 我尝试通过执行两个查询并将结果与​​PHP结合来解决此问题。但是当我试图对结果进行分页并且我会说限制2时,这将返回4个结果,因为两个查询都会得到2个结果。

查询

(SELECT *
FROM product
WHERE group_code != '' 
GROUP BY group_code)

UNION ALL

(SELECT *
FROM product
WHERE group_code IS NULL 
GROUP BY id)

LIMIT 0, 2;

通缉结果:

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);

1 个答案:

答案 0 :(得分:1)

这会给你相同的结果。但是由于您正在进行分组但是没有汇总结果,因此查询有点冒险..

SELECT *
FROM product
GROUP BY COALESCE(group_code, id)
ORDER BY 1 LIMIT 0,
                 2