0

有 3 个不同的表,从第一个表中我得到“contact_id”,基于此,我想对接下来的 2 个表进行 SUM,然后减去表,如下面的代码所示。
我正在尝试将第一个查询的结果“contact_id”用于以下查询

SELECT (
    SELECT `id`
    FROM `civicrm_contact`
    WHERE `first_name` LIKE 'test2'
) AS contact_id

==================================================== ===========

SELECT (
    SELECT SUM(`total_amount`)
    FROM `civicrm_contribution`
    WHERE `contact_id`=
)
-
(
    SELECT SUM(`fee_amount`)
    FROM `civicrm_participant`
    WHERE `contact_id`= 
) As RemainingPoints
4

4 回答 4

1

您需要使用子查询:

SELECT (
    SELECT SUM(`total_amount`)
    FROM `civicrm_contribution`
    WHERE `contact_id`= (SELECT `id` FROM `civicrm_contact` WHERE `first_name` LIKE 'test2' ) AS contact_id) 
)
-
(
    SELECT SUM(`fee_amount`)
    FROM `civicrm_participant`
    WHERE `contact_id`= (SELECT `id` FROM `civicrm_contact` WHERE `first_name` LIKE 'test2' ) AS contact_id)
) As RemainingPoints
于 2013-09-03T04:30:18.020 回答
0

这可以帮助你

SELECT @s:=1+1 ,@s + 4,@s-1

o/p -@s:=1+1|@s + 4 | @s-1

       2  |    6|   1
于 2013-09-03T04:38:52.183 回答
0

您应该将子查询的结果限制为 1 否则会导致错误,最好的方法是使用'='而不是匹配名称'like'

SELECT (
    SELECT SUM(`total_amount`)
    FROM `civicrm_contribution`
    WHERE `contact_id`= (SELECT `id` FROM `civicrm_contact` WHERE `first_name` LIKE 'test2' limit 1 ) AS contact_id) 
)
-
(
    SELECT SUM(`fee_amount`)
    FROM `civicrm_participant`
    WHERE `contact_id`= (SELECT `id` FROM `civicrm_contact` WHERE `first_name` LIKE 'test2' limit 1 ) AS contact_id)
) As RemainingPoints
于 2013-09-03T04:37:59.770 回答
0

这应该可以解决您的问题:

SELECT (
    SELECT SUM(`total_amount`)
    FROM `civicrm_contribution`
    WHERE `contact_id` in (SELECT `id` FROM `civicrm_contact` WHERE `first_name` LIKE 'test2' ) AS contact_id) 
)
-
(
    SELECT SUM(`fee_amount`)
    FROM `civicrm_participant`
    WHERE `contact_id` in (SELECT `id` FROM `civicrm_contact` WHERE `first_name` LIKE 'test2' ) AS contact_id)
) As RemainingPoints
于 2013-09-03T04:35:01.330 回答