你好吗 ?我有mysql数据库。我试图让查询有点复杂。我要写下我到目前为止所做的事情。
SELECT BONOD_AMOUNT, BONOD_DETAILS_ID
FROM `BONOD_DETAILS`
WHERE BONOD_ID
IN (
SELECT BONOD_ID
FROM BONOD_TABLE
WHERE USER_ID =16
)
结果是:
BONOD_AMOUNT BONOD_DETAILS_ID
10000 3
1520 4
SELECT SUM( AMOUNT ) THE_SUM, BONOD_DETAILS_ID
FROM EXPENSES_TABLE
WHERE BONOD_DETAILS_ID
IN (
SELECT BONOD_DETAILS_ID
FROM BONOD_DETAILS
WHERE USER_ID =16
AND BONOD_ENABLE =1
) GROUP BY BONOD_DETAILS_ID
UNION ALL
SELECT 0 AS THE_SUM, BONOD_DETAILS_ID
FROM BONOD_DETAILS
WHERE BONOD_ID
IN (
SELECT BONOD_ID
FROM BONOD_TABLE
WHERE USER_ID =16
)
AND BONOD_DETAILS_ID NOT
IN (SELECT BONOD_DETAILS_ID
FROM EXPENSES_TABLE
)
结果是:
THE_SUM BONOD_DETAILS_ID
270 3
0 4
所以,我想从#Query1中的BONOD_AMOUNT和#Query2中的BONOD_AMOUNT进行减法查询
结果可以是:
THE_SUB BONOD_DETAILS_ID
9730 3
1520 4
我相信你的#Query2有一个小错误。在联盟的所有部分。我认为要工作,你应该做以下事情:
SELECT 0 AS THE_TOTAL_SPENT , BONOD_DETAILS_ID
FROM BONOD_DETAILS
WHERE BONOD_ID
IN (
SELECT BONOD_ID
FROM BONOD_TABLE
WHERE USER_ID =16
)
AND BONOD_DETAILS_ID NOT
IN (
SELECT BONOD_DETAILS_ID
FROM EXPENSES_TABLE WHERE USER_ID = 16
)
所以,正如JNevill回答的那样。查询将是
SELECT A.TOTAL_AMOUNT-B.THE_TOTAL_SPENT AS TOTAL,
A.TOTAL_AMOUNT, B.THE_TOTAL_SPENT,A.BONOD_DETAILS_ID
FROM
(SELECT BONOD_AMOUNT TOTAL_AMOUNT , BONOD_DETAILS_ID
FROM `BONOD_DETAILS `
WHERE BONOD_ID
IN ( SELECT BONOD_ID
FROM BONOD_TABLE
WHERE USER_ID =16
)) A,
( SELECT SUM( AMOUNT ) THE_TOTAL_SPENT, BONOD_DETAILS_ID
fROM EXPENSES_TABLE
WHERE BONOD_DETAILS_ID
IN (
SELECT BONOD_DETAILS_ID
FROM BONOD_DETAILS
WHERE USER_ID =16
AND BONOD_ENABLE =1
)
GROUP BY BONOD_DETAILS_ID
UNION ALL
SELECT 0 AS THE_TOTAL_SPENT , BONOD_DETAILS_ID
FROM BONOD_DETAILS
WHERE BONOD_ID
IN (
SELECT BONOD_ID
FROM BONOD_TABLE
WHERE USER_ID =16
)
AND BONOD_DETAILS_ID NOT
IN (
SELECT BONOD_DETAILS_ID
FROM EXPENSES_TABLE WHERE USER_ID = 16
)
) B
WHERE A.BONOD_DETAILS_ID = B.BONOD_DETAILS_ID
最简单的方法是将这两个连接到BONOD_DETAILS_ID并减去第一列:
SELECT
sub1.BONOD_AMOUNT - sub2.THE_SUM AS THE_SUB, sub1.BONOD_DETAILS_ID
FROM
(
SELECT BONOD_AMOUNT, BONOD_DETAILS_ID
FROM `BONOD_DETAILS`
WHERE BONOD_ID
IN (
SELECT BONOD_ID
FROM BONOD_TABLE
WHERE USER_ID =16
)
)sub1
LEFT OUTER JOIN
(
SELECT SUM( AMOUNT ) THE_SUM, BONOD_DETAILS_ID
FROM EXPENSES_TABLE
WHERE BONOD_DETAILS_ID
IN (
SELECT BONOD_DETAILS_ID
FROM BONOD_DETAILS
WHERE USER_ID =16
AND BONOD_ENABLE =1
) GROUP BY BONOD_DETAILS_ID
UNION ALL
SELECT 0 AS THE_SUM, BONOD_DETAILS_ID
FROM BONOD_DETAILS
WHERE BONOD_ID
IN (
SELECT BONOD_ID
FROM BONOD_TABLE
WHERE USER_ID =16
)
AND BONOD_DETAILS_ID NOT
IN (SELECT BONOD_DETAILS_ID
FROM EXPENSES_TABLE
)
) sub2 ON sub1.BONOD_DETAILS_ID = sub2.BONOD_DETAILS_ID
我想这可以简化,但由于我看不到你的数据,也不知道你的桌子的关系,我不能肯定地说。我可以说这会得到你想要的结果。