MYSQL select count(*) in an table if id exists in another table

标签 mysql sql select count where

这应该很简单,但我一直坚持下去,在这里找不到答案。

我想计算一个表中与给定 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 运行将返回 2user_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/

相关文章:

php - 显示最近 3 条新闻消息

MySQL ORDER BY 两个子句(降序和升序)

php - 提交意见或建议或反馈

mysql - 如何读取 MYI、MYD、frm

c# - 数据库 - 历史数据

java - 如何在进行某些验证时锁定 Oracle 中的记录

mysql - 如何在mysql子查询中访问外列值?

mysql - 如何从三个表到三列中选择数据?

sql - Oracle SQL -- 从两列中选择并合并为一

mysql - SQL 将多个值放入一列中,以逗号分隔