如何创建一个VIEW,其结果与底部的以下SQL相同。 VIEW必须以任何方式可由任何人使用:
SELECT * FROM my_view WHERE merch_id = 'some_value';
当前的SQL使用PHP代替UNION两侧的WHERE参数,但是语言无关紧要。
这是基本的SQL:
SELECT
mine.cust_id,
cust_meta.cust_name,
mine.bank_id,
sum(mine.invoices) AS invoices,
sum(mine.payments) AS payments
FROM (
SELECT
cust_id,
bank_id,
count(*) AS invoices,
NULL AS payments
FROM
s_bill_meta.t_invoice
WHERE
merch_id = '$var'
GROUP BY
cust_id,
bank_id
UNION
SELECT
cust_id,
bank_id,
NULL AS invoices,
count(*) AS payments
FROM
s_credit_meta.t_check
WHERE
merch_id = '$var'
GROUP BY
cust_id,
bank_id
) AS mine
LEFT JOIN
s_user.t_cust AS cust_meta
ON mine.cust_id = cust_meta.cust_id
GROUP BY
mine.cust_id,
cust_meta.cust_name,
mine.bank_id
ORDER BY
mine.cust_id,
mine.bank_id
答案 0 :(得分:2)
您将在汇总列中包含merch_id
:
SELECT mine.cust_id, cust_meta.cust_name, mine.bank_id, mine.merch_id,
sum(mine.invoices) AS invoices,
sum(mine.payments) AS payments
FROM ((SELECT cust_id, bank_id, merch_id, count(*) AS invoices, NULL AS payments
FROMs_bill_meta.t_invoice
GROUP BY cust_id, bank_id, merch_id
) UNION ALL
(SELECT cust_id, bank_id, merch_id, NULL AS invoices, count(*) AS payments
FROM s_credit_meta.t_check
GROUP BY cust_id, bank_id, merch_id
)
) mine LEFT JOIN
s_user.t_cust cust_meta
ON mine.cust_id = cust_meta.cust_id
GROUP BY mine.cust_id, cust_meta.cust_name, mine.bank_id, mine.merch_id
ORDER BY mine.cust_id, mine.bank_id;
答案 1 :(得分:2)
您可以使用功能:
print(f'final j = {j}, i = {i}, n = {n}, s = `{s}`')
然后致电:
CREATE FUNCTION myview(text) RETURNS TABLE
(
cust_id INT,
...
)
AS '
SELECT cust_id, ...
FROM ...
WHERE merch_id = $1
GROUP BY ...
' LANGUAGE SQL;