首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用if条件或大小写连接4个表的Sql查询

使用if条件或大小写连接4个表的Sql查询
EN

Stack Overflow用户
提问于 2019-04-11 15:54:06
回答 1查看 331关注 0票数 0

我有四张桌子可以聊天。

表-1(主注释表,表-1的用户来自表-2)

id

评论

表-2(当表-1中添加了新的注释时,表-2也将使用注释的user_id进行更新)

Comment_id(参考表-1)

user_id

表-3(做一些其他工作但与表-1通过comment_id相关)

id

与表-3相关的列

comment_id

user_id

表-4(做了一些其他工作,但通过comment_id与表1相关)

id

与表-4相关的列

comment_id

user_id

现在,我希望从所有表(表-2、表-3、表-4)中获得注释_id,最后如果表中的任何一个表中的特定用户使用这些注释_id从表-1获得注释。

代码语言:javascript
复制
SELECT A.id,A.comment,
FROM Table-1 A  
LEFT JOIN Table-2 B 
ON B.comment_id = A.id
LEFT JOIN Table-3 C 
ON C.comment_id = A.id OR C.user_id = {$current_user}
LEFT JOIN Table-4 D
ON D.comment_id = A.id OR D.user_id = {$current_user}
WHERE  B.`user` = {$current_user}
GROUP BY A.`id`
ORDER BY A.`id` DESC
LIMIT 7 OFFSET 0

我也试过三张桌子的组合

代码语言:javascript
复制
Select A.id AS cid
FROM Table-1 A
LEFT JOIN Table-2 B
ON B.comment_id = A.id
WHERE B.user_id = {$current_user}
UNION
Select C.comment_id AS cid
FROM Table-3 C
WHERE C.user_id = {$current_user}
UNION
Select D.comment_id AS cid
FROM Table-4 D
WHERE D.user_id = {$current_user} 

但在这里,我不知道如何使“组由A.id,命令由A.id DESC限制7偏移量0”工作,也不知道如何使用id从联合得到从表1的注释。

表-1(活动)表-2(注释)表-2(注释) id连接到表-1(活动)作为数据id。我是链接表-2(了解时间和评论用户等)在表-1。

表3(聊天)这里的概念就像一个注释可以有线程,它是由chat表示的。它将永远与评论有关。

表-4(Chat_followers)这里我们可以向其他用户切换,所以聊天中的所有用户都会在这里。

最终的想法是,如果他写了评论或者在聊天中回复了(评论的线程),或者他被其他人点击了,那么他就会得到“用户的所有评论”。

EN

回答 1

Stack Overflow用户

发布于 2019-04-11 16:06:25

既然您不需要表2、3、4中的注释IN以外的任何数据,那么为什么不使用一个简单的IN子句呢?

代码语言:javascript
复制
SELECT * 
FROM Table1 A
WHERE A.id IN 
(SELECT Comment_Id FROM Table2 WHERE.... UNION ALL 
SELECT Comment_ID FROM Table3 WHERE... UNION ALL 
SELECT Comment_Id FROM Table4 WHERE...)
GROUP BY A.`id`
ORDER BY A.`id` DESC
LIMIT 7 OFFSET 0

如果您确实希望使用其他表中的其他列,则可以使用左外部联接来完成此操作:

代码语言:javascript
复制
SELECT A.id,A.comment
FROM 
    Table-1 A  LEFT JOIN 
    Table-2 B ON B.comment_id = A.id AND B.User = currentUserId LEFT JOIN 
    Table-3 C ON C.comment_id = A.id AND C.User = currentUserId LEFT JOIN 
    Table-4 D ON D.comment_id = A.id AND D.User = currentUserId
WHERE  B.id IS NOT NULL OR C.id IS NOT NULL OR D.id IS NOT NULL
GROUP BY A.`id`
ORDER BY A.`id` DESC
LIMIT 7 OFFSET 0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55636616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档