Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 将查询表中的结果用于另一个查询_Mysql - Fatal编程技术网

Mysql 将查询表中的结果用于另一个查询

Mysql 将查询表中的结果用于另一个查询,mysql,Mysql,共有3个不同的表,从第一个表中我得到了“联系人id”,基于此,我想对下两个表进行求和,然后减去下面代码中的表。 我试图将第一个查询的结果“contact_id”用于以下查询 SELECT ( SELECT `id` FROM `civicrm_contact` WHERE `first_name` LIKE 'test2' ) AS contact_id ==========================================================

共有3个不同的表,从第一个表中我得到了“联系人id”,基于此,我想对下两个表进行求和,然后减去下面代码中的表。
我试图将第一个查询的结果“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

您需要使用子查询:

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

这将解决您的问题:

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

您应该将子查询的结果限制为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
这可以帮助你

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

       2  |    6|   1

查询可能会失败,因为内部子查询可能返回多个值。在中使用
而不是
=
在这种情况下,让我们使用限制1。感谢您详细的回答!我最终改变了结构,并在查询中使用了sub-select。谢谢你的明确提示,我不知道。