我正在使用Query构造函数,因此我有点受限制,因为我只能改变查询的构造,而不是将结果从多个查询中拉出来。
因此,我正在寻找一种从单个表返回两个结果的方法,其中列为group_name
我想准确地返回两个结果,一个符合每个标准的结果。有没有办法通过WHERE子句,子查询,CASE或控制流语句来做到这一点?
注意,由于这个旧的,受限制的查询构建器,不能使用UNION,但我可以执行Group By,Where和其他一些操作。
最终,我认为它应该与您将这两个查询结合起来的结果集相同: SELECT * from business where group_name =''LIMIT 1; SELECT * from business where group_name!=''LIMIT 1;
答案 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/