mysql - 同一张表上有多个条件的 where 子句

标签 mysql

我搜索了这个主题并找到了很多主题,但很抱歉我找不到解决方案/想法。

我有如下表格

名字 |技术
资源 1 | java
资源 1 | MySQL
研究2 | java
研究3 | java
研究3 | PHP
研究3 | MySQL
Res4 | MySQL
Res4 | PHP
等等..


我想建立一个关系表作为

名字 |相似资源
资源 1 | Res3
研究2 | Res1, Res3
研究3 |空
Res4 | Res3

了解池中可用的类似资源。我试图用游标创建存储过程,但无法继续。
我正在尝试构建的步骤,
1. 对于表中的每个资源,找到他们熟悉的技术列表
2. 使用结果,通过表格搜索找到所有具有相同技术的资源。
我尝试使用 IN 并导致昂贵的查询。
请提出一个更好的方法。

最佳答案

为了满足相似资源必须具有所有匹配技术的要求,您可以使用内嵌 View 比较匹配技术的计数

SELECT counts.name, 
       Group_concat(matchCount.name) simliarName 
FROM   (SELECT name, 
               Count(technology) techCount 
        FROM   table1 
        GROUP  BY name) counts 
       LEFT JOIN (SELECT t1.name              t1_name, 
                         t2.name, 
                         Count(t2.technology) matchingTech 
                  FROM   table1 t1 
                         JOIN table1 t2 
                           ON t1.technology = t2.technology 
                              AND t1.name != t2.name 
                  GROUP  BY t1.name, 
                            t2.name) matchCount 
              ON counts.name = matchcount.t1_name 
                 AND counts.techcount <= matchCount.matchingtech 
GROUP  BY counts.name 

Demo

关于mysql - 同一张表上有多个条件的 where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24374925/

相关文章:

php - MySQL RAND() 多久可以使用一次?它使用/dev/random 吗?

php - 用于将 csv 文件插入 mysql 数据库的 Drupal 模块

php - 使用 mysql 转储备份 mysql 数据库时获取 0KB 大小的文件

sql - MySQL查询计数问题

MySQL 使用串联查询多个表

php - 如何将 html 表单与 sql 数据库表链接?

php - 如何将最低索引值分配给最新行或按相反顺序排序

MySQL在两个不同的数据库表上加入选择

java - mysql 到 sqoop - 连接被拒绝 : java.net.ConnectException

mysql - 在两个日期范围内获取结果