mysql - 选择多个表 MySQL

标签 mysql

我有三个表“users”、“friends”、“friendsrequests”。

“Users”包含 ID、名字和姓氏,“friends”和“friendsrequests”均包含 users_id_a 和 users_id_b。

当我搜索新 friend 时,我会选择名字为 LIKE :whatever 或姓氏为 LIKE :whatever 的 ID。但是,我想排除其他两个表中存在的那些 id。

我知道如何通过应用程序逻辑解决这个问题,但我也知道我不应该这样做。我知道我不应该链接 SELECT 语句,而应该使用联接。

最佳答案

您已经回答了自己的问题,因为您知道可以使用联接。这里有很多关于如何在 MySQL 中进行连接的示例。

有多种连接类型,但在本例中您需要的连接类型可能是 LEFT OUTER。您可以使用 IS NULL 对其他两个表上的字段进行过滤。因此,它所做的就是连接附加表,无论这些表中是否有任何数据。使用 WHERE IS NULL 过滤掉那些存在的内容。

您可以采用 WHERE NOT EXISTS 方法,而不是使用联接。如果您不熟悉 SQL 连接,那么这种逻辑可能更适合您。 一个例子可能是:

SELECT * FROM FRIENDS f
WHERE NOT EXISTS (SELECT 1 FROM friendsrequests fr WHERE f.user_id = fr.user_id)

一些示例可以在这里找到: SELECT * WHERE NOT EXISTS

使用 IN 语句或特别是 WHERE NOT IN (SELECT ...) 的另一种方法

如果您仍然无法在 http://sqlfiddle.com/ 等网站上发布确切的 sql 架构和要求,希望这能为您提供指导。您更有可能得到更具体的回复。

关于mysql - 选择多个表 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19196183/

相关文章:

sql - 如何提出条件?

MySQL C API mysql_query

php - 统计ID数量

mysql - select 语句引起的数据库死锁

mysql - 在 latex 中使用mysql

java - 为什么包含 blob 的 INSERT INTO 不保留记录

mysql - GROUP_CONCAT - WHERE 条件

php - 如何在数据库中存储数组

mysql - 在 OSX 中挂载 Docker 卷时权限被拒绝

android - 将 QR 码传输到 MySql 数据库