这是一种更好的方法来进行这种查询吗? (它的伪代码)我不知道它的语法是否正常,但这就是这个想法:
SELECT S.*, isFromFriend = true
FROM messages AS S
WHERE id IN (SELECT id FROM friends)
UNION ALL
SELECT S.*, isFromFriend = false
FROM messages AS S
WHERE S.id NOT IN (SELECT id FROM friends)
如果我的用户是" userid = 17"我在回复时需要这样的东西。我是用户25的朋友但不是用户33的朋友:
{ "message": "hello", "userid": "25", "isFromFriend" = "true" }
{ "message": "hi!!!!", "userid": "33", "isFromFriend" = "false" }
我的问题是 SELECT isFromFriend 字段,我不想复制查询两次只更改WHERE上的NOT IN和IN,因为实际查询太大了。
答案 0 :(得分:3)
这个伪代码非常难以理解且不方便。更好地放置您的SQL代码。 至于我,我实际上会做这样的事情。
SELECT S.*, F.id AS Fid
FROM messages AS S
LEFT JOIN Friends AS F
ON s.id = F.UserId
所以,如果没有'朋友'或Fid =朋友的id或用户的id(由你的数据库结构和查询决定),你会得到Fid = null的行。 无论如何,我认为这些查询的表现没有区别(至少,我不能打电话和解释) - 这只是我自己的观点和习惯。您的查询非常简洁。
答案 1 :(得分:2)
只是为耶尔达尔的回答添加一点。你可以这样做:
SELECT S.*, CASE WHEN F.id IS NULL THEN false ELSE true END AS isFriend
FROM messages AS S
LEFT JOIN Friends AS F
ON s.id = F.UserId
这将为您提供布尔字段输出