首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在sql中左联接GROUP子句,并使用OR

问在sql中左联接GROUP子句,并使用OR
EN

Stack Overflow用户
提问于 2018-02-06 07:45:52
回答 2查看 1.4K关注 0票数 1

我有3个表:表1- "taxonomy_index“,其中有4列(列是nid、tid、粘稠的、创建的)。

表2-“节点”,其中有15列(列为nid、vid、type等)。)

表3- "taxonomy_term_data“,其中有6列(列为tid、vid、name等)

我想加入这三张桌子,也有一些条件。

我知道每个查询,但我想将所有查询设置为一个,并形成一个连接。

查询1

代码语言:javascript
复制
SELECT count(*), tid 
FROM taxonomy_index 
GROUP BY tid HAVING COUNT(*) >3

这个查询给了我两个值,一个是count,另一个是tid。(使用tid )多少次。

查询2

代码语言:javascript
复制
select * 
from node 
where type='book' OR type='student' 
OR type='teacher' OR type='class';

在这里,我将得到与这些内容类型相关联的节点。

我想加入三张桌子。在输出中,我希望获得每个tid使用的次数(查询1)和类型(查询2),并从taxonomy_term_data获取tid名称。

给定类型的计数、tid、名称

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-06 10:48:39

代码语言:javascript
复制
SELECT distinct t1.TID, t3.name, cntt1.count from taxonomy_index t1 
inner join 
( 
SELECT count(*) as 'count', t1.tid 
FROM taxonomy_index t1 
GROUP BY t1.tid HAVING COUNT(*) >3 
) cntt1 on t1.tid = cntt1.tid 
inner join node t2 on t1.nid = t2.nid and (type='book' OR type='student' OR 
type='teacher' OR type='class') 
inner join taxonomy_term_data t3 on t1.tid = t3.tid
票数 2
EN

Stack Overflow用户

发布于 2018-02-06 08:45:50

好的,假设每次都可以在tid上加入,您可以使用以下语法。请注意,CTE在这里并不是简写的,我只是发现它们对于可读性很有用。

代码语言:javascript
复制
;WITH CTE_Count AS 
 (
 SELECT count(*) AS Count, tid 
 FROM taxonomy_index 
 GROUP BY tid HAVING COUNT(*) >3
 )

, CTE_Node AS 
 (select * 
  from node 
  where type='book' OR type='student' 
  OR type='teacher' OR type='class' )

 , CTE_TermData AS 
 (SELECT * FROM taxonomy_term_data)

 SELECT CC.tid, CC.Count, CN.Node, CT.tid_Name
 FROM CTE_Count AS CC
 INNER JOIN CTE_Node AS CN ON CN.tid = CC.tid
 INNER JOIN CTE_TermData AS CT ON CT.tid = CC.tid
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48637886

复制
相关文章

相似问题

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