如何从具有两个不同where子句的M​​ySQL查询中获得两个至少两个结果?

时间:2012-01-09 23:34:55

标签: mysql

我正在使用Query构造函数,因此我有点受限制,因为我只能改变查询的构造,而不是将结果从多个查询中拉出来。

因此,我正在寻找一种从单个表返回两个结果的方法,其中列为group_name

  • 其中group_name =''
  • 其中group_name!=''

我想准确地返回两个结果,一个符合每个标准的结果。有没有办法通过WHERE子句,子查询,CASE或控制流语句来做到这一点?

注意,由于这个旧的,受限制的查询构建器,不能使用UNION,但我可以执行Group By,Where和其他一些操作。

最终,我认为它应该与您将这两个查询结合起来的结果集相同: SELECT * from business where group_name =''LIMIT 1; SELECT * from business where group_name!=''LIMIT 1;

3 个答案:

答案 0 :(得分:3)

尝试

SELECT * FROM BUSINESS
GROUP BY (group_name='');

这将返回表格中group_name为'的第一条记录,以及!=''的第一条记录。

如果您想为group_name生成'','asdf'或其他任何内容选择一条记录,您可以这样做:

SELECT * FROM BUSINESS
GROUP BY ( CASE group_name
           WHEN '' THEN 1
           WHEN 'asdf' THEN 2
           ELSE 3
           END );

对于group_name''的任何内容,值为1,对group_name'asdf'的任何内容赋值为2,对所有内容的值为3其他

由于有一个GROUP BY,它会为每个记录选择一条记录(第一次出现)。

(供您参考:CASE documentation。)

答案 1 :(得分:2)

你能做一个UNION吗?

(SELECT * FROM businesses WHERE group_name = '' LIMIT 1)
UNION
(SELECT * FROM businesses WHERE group_name != '' LIMIT 1)

如果您需要确定哪个记录来自哪个集合,您可以在每个集合中为一个静态字段添加别名:

(SELECT 'empty' AS group_name_status, * FROM businesses WHERE group_name = '' LIMIT 1)
UNION
(SELECT 'notempty' AS group_name_status, * FROM businesses WHERE group_name != '' LIMIT 1)

答案 2 :(得分:1)

您是否尝试过union关键字? http://www.sql-tutorial.com/sql-union-sql-tutorial/