0

我有三个表“用户”、“朋友”、“朋友请求”。

'Users' 包含 id、firstname 和 lastname,'friends' 和 'friendsrequests' 都包含 users_id_a 和 users_id_b。

当我搜索新朋友时,我选择 id's where firstname is LIKE :whatever 或 lastname LIKE :whatever。但是,我想排除其他两个表中存在的那些 id。

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

4

1 回答 1

2

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

有几种连接类型,但在这种情况下您需要的可能是 LEFT OUTER。您可以使用 a 然后对其他两个表上的字段进行过滤IS NULL。因此,无论这些表中是否有任何数据,它都在加入附加表。使用 WHEREIS 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 架构和要求,希望这将指导您,并且您更有可能得到更具体的响应。

于 2013-10-05T09:42:06.947 回答