And*_*w M 12 sql postgresql union
我使用Excel SELECT从具有大量相同模式的数据库中的模式名称列表中生成大量语句:
select result from foo.table limit 1;
select result from bar.table limit 1;
select result from doo.table limit 1;
(foo,bar&doo是我的架构的例子,现实中有数百个).
每个SELECT只返回一个结果.我只想要一个列result与模式一样多的行.然后我可以根据模式名称将其复制回Excel.
当我运行上面的查询时,我得到1行,其他行被丢弃:
Query result with 1 row discarded. Query result with 1 row discarded. Total query runtime: 40 ms. 1 row retrieved.
我尝试过使用UNION ALL,但是limit 1我用来确保每个模式表只返回一行,以防止这种情况发生.
如何阻止其他行被丢弃,或者以更有效的方式编写将返回我需要的值的查询(两列 - schema_name,结果 - 每个模式一行)?
Erw*_*ter 21
只需在括号中包含单个语句,以使语法明确:
(SELECT result FROM tbl1 LIMIT 1)
UNION ALL
(SELECT result FROM tbl2 LIMIT 1)
select_statement任何SELECT没有声明ORDER BY,LIMIT,FOR UPDATE,或FOR SHARE条款.(ORDER BY并且LIMIT可以,如果它被包围在括号被附着到子表达式,没有括号,这些条款将被视为适用于的结果UNION,而不是它的右手输入表达式.)
小智 10
create view my_data1 
AS
with data as
(
    select student_id,sum(marks) as total_marks 
    from   marks_marks 
    group by 1
) , 
data1 as
(
    select id, name 
    from   students_class
), 
data2 as
(
    select applicant_name,
           id,
           class_name 
    from   students_students
)
select data2.applicant_name , 
       data1.name as class_name ,  
       data.total_marks 
from   data2 
join   data1  on data1.id = data2.class_name 
join   data   on data.student_id = data2.id
select * from my_data1
在子查询中包装会绕过它,但它有点难看.
SELECT result FROM (select 'a'::text AS result from foo limit 1) a
UNION ALL
SELECT result FROM (select 'b'::text AS result from bar limit 1) b
UPDATE
见欧文的回应.这个比较好.