首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL 3列查询返回重复项

MySQL 3列查询返回重复项
EN

Stack Overflow用户
提问于 2012-06-29 10:17:46
回答 3查看 105关注 0票数 0
代码语言:javascript
复制
x_Id  | y_Id | z_Id
----- |----- |-----
1     | 1    | 1
2     | 1    | 1
3     | 1    | 1
4     | 1    | 1
5     | 1    | 1
1     | 2    | 3

我在编程方面比较新手,我不能理解这个MySql查询。我只需要选择x_Id where ((y_Id =1和z_Id = 1)和(y_Id =2和z_Id = 3))。因此,以这些数字为例,唯一应该选择的是(x_Id =) 1。

**所有这些列都在同一个表中

我最接近的方法是使用下面的查询:

代码语言:javascript
复制
SELECT 
    * 
FROM 
    `relationships` 
WHERE
    y_id = 1 AND
    z_id = 1

UNION    
SELECT 
    * 
FROM 
    `relationships` 
WHERE
    z_id = 3 AND
    y_id = 2

但是,这将再次返回所有的x_ids和x_id =1作为副本。

**我使用的是sqlPro和MySql 5

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-29 10:24:14

不需要联合。

看到评论后更新的

代码语言:javascript
复制
select
*
from relationships T1
INNER JOIN relationshipsT2 on t1.x_Id   = t2.x_Id  where
((T1.y_Id = 1 AND T1.z_Id = 1) AND (T2.y_Id  = 2 AND T2.zz_Id= 3))

此外,您只能返回x_Id,而不能返回*

票数 0
EN

Stack Overflow用户

发布于 2012-06-29 10:24:32

在看到评论后更新:

使用聚合SUM(),您可以对每个x_id值满足的条件总数进行求和。如果总数大于1,则表中的某个位置同时满足这两个条件。

代码语言:javascript
复制
SELECT DISTINCT x_id FROM (
  SELECT
    x_id,
    SUMCASE WHEN (y_id = 1 AND z_id = 1) OR (z_id = 3 AND y_id = 2) THEN 1 ELSE 0 END) AS hasboth
  FROM relationships
  GROUP BY x_id
  HAVING hasboth > 1
) subq
票数 0
EN

Stack Overflow用户

发布于 2012-06-29 10:31:48

如果只对DISTINCT值感兴趣,可以使用上面的查询,但只需添加x_id并仅投影x_id值。

示例:

代码语言:javascript
复制
SELECT 
    DISTINCT x_id 
FROM 
 `relationships` 
WHERE
     y_id = 1 AND z_id = 1

UNION

SELECT 
    DISTINCT x_id 
FROM 
    `relationships` 
WHERE
    z_id = 3 AND y_id = 2

几乎没有其他方法可以做到这一点,这些方法甚至更容易,比如在WHERE子句中使用OR。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11255271

复制
相关文章

相似问题

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