Mysql 将查询表中的结果用于另一个查询
共有3个不同的表,从第一个表中我得到了“联系人id”,基于此,我想对下两个表进行求和,然后减去下面代码中的表。Mysql 将查询表中的结果用于另一个查询,mysql,Mysql,共有3个不同的表,从第一个表中我得到了“联系人id”,基于此,我想对下两个表进行求和,然后减去下面代码中的表。 我试图将第一个查询的结果“contact_id”用于以下查询 SELECT ( SELECT `id` FROM `civicrm_contact` WHERE `first_name` LIKE 'test2' ) AS contact_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。谢谢你的明确提示,我不知道。