我有三个表“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/