php - SQL - 如果存在于另一个表中

标签 php mysql sql

有 2 个表:subjectsmessages

主题表:

----id----   ----title----
1            Subject 1
2            Subject 2
3            Subject 3

消息表:

----id----   ----subject----   ----message----
1            1                 Message to Subject 1
2            1                 Message to Subject 1
3            2                 Message to Subject 2

如何获取subjectsmysql_num_rows,其中messages中是否有消息?结果一定是2,因为Subject 1在messages中有消息,而Subject 2在messages中有消息,而Subject 3在messages中没有收到任何消息

类似于:

mysql_num_rows(mysql_query("SELECT * FROM subjects ...

最佳答案

您通常会为此目的使用 inexists:

select count(*)
from subjects s
where exists (select 1 from messages m where m.subject_id = s.id);

这可以很容易地修改以获得没有消息的主题。

如果您在表之间定义了适当的外键关系,那么您可以只计算消息中的主题:

select count(distinct m.subject_id)
from messages;

MySQL 中的聚合非常昂贵。在某些情况下,这会表现得更好。但是,假设您在 messages(subject_id) 上有一个索引,那么 exists 在大多数情况下可能会表现得更好。

关于php - SQL - 如果存在于另一个表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44112831/

相关文章:

javascript - 如何将特定语言的关键字提取到 Javascript 中

php - SQL - 如何获取创建的同一日期的最新数据

python - 插入到通过外键连接的多个表中

mysql - 选择随机行时的 SQL Join 帮助

php - 显示用户名可用,即使已经存在

php - 如何获取 PHP 类中所有函数的数组?

sql - 在带有输入参数的存储过程中使用 LIKE

sql - 使用 Excel VBA 更新 Access 数据库时确定记录是否存在

php - 为什么这个易受攻击的 PDO 会起作用而不是准备好的语句呢?

mysql - 如何将 MySQL 语句转换为数值?