SELECT (SELECT SUM(table1.col1) FROM table1) AS sum_1,
(SELECT SUM(table2.col1) FROM table2) AS sum_2;
Możesz też napisać to jako:
SELECT t1.sum_c1, t1.sum_c2, t2.sum_t2_c1
FROM
(
SELECT SUM(col1) sum_c1,
SUM(col2) sum_c2
FROM table1
) t1
FULL OUTER JOIN
(
SELECT SUM(col1) sum_t2_c1
FROM table2
) t2 ON 1=1;
FULL JOIN jest używane z warunkiem niewypału, tak że każde podzapytanie może nie dać żadnych wyników (puste) bez powodowania, że większe zapytanie nie ma żadnego wyniku.
Nie sądzę, aby zapytanie, które napisałeś, przyniosło oczekiwany wynik, ponieważ wykonuje CROSS JOIN między tabelą 1 i tabelą 2, co spowoduje zawyżenie każdej SUMY o liczbę wierszy w drugiej tabeli. Zauważ, że jeśli którakolwiek tabela1/tabela2 jest pusta, CROSS JOIN spowoduje, że X wierszy po 0 wierszy zwróci pusty wynik.
Spójrz na to SQL Fiddle i porównaj wyniki.