这应该很简单,但我一直坚持下去,在这里找不到答案。
我想计算一个表中与给定 user_id
匹配的记录数,如果该 user_id
存在于另一个表中,否则返回 -1。
类似于:
SELECT COUNT(*)
FROM table_1
WHERE user_id = (IF EXISTS table_2.user_id = '22')
, ELSE -1;
总而言之,如果 table_2
包含一个 user_id
为 22,则返回 table_1
中带有 user_id< 的记录数
为 22,否则返回 -1。
请问我该怎么做? (注意。澄清一下,user_id
不是两个表中的主键)
编辑: 添加表格示例:
table_1
---------------------
user_id | item
---------------------
22 | apple
23 | orange
22 | banana
table_2
---------------------
user_id | name
---------------------
20 | billy
21 | bob
22 | thornton
因此,使用 user_id = 21
运行我需要的查询将返回 0
,使用 user_id = 22
运行将返回 2
和 user_id = 23
将返回 -1
。
最佳答案
这是否为您提供了所需的结果?
SELECT
CASE COUNT(*) WHEN 0 THEN -1 ELSE COUNT(*) END AS row_count
FROM table_1
WHERE user_id = 22
AND (
SELECT COUNT(*)
FROM table_2
WHERE user_id = 22) >= 1;
它使用 CASE 语句来执行检查,如果没有找到记录则显示 -1。它在 WHERE 子句中使用子查询来查找 table_2 中的记录数,并检查它是否大于或等于 1。
有几种方法可以做到这一点 - 它可以通过 LEFT JOIN 或 EXISTS 来完成,但我认为这会起作用。
关于MYSQL select count(*) in an table if id exists in another table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46636140/