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。
**所有这些列都在同一个表中
我最接近的方法是使用下面的查询:
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
发布于 2012-06-29 10:24:14
不需要联合。
看到评论后更新的:
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,而不能返回*
发布于 2012-06-29 10:24:32
在看到评论后更新:
使用聚合SUM(),您可以对每个x_id值满足的条件总数进行求和。如果总数大于1,则表中的某个位置同时满足这两个条件。
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发布于 2012-06-29 10:31:48
如果只对DISTINCT值感兴趣,可以使用上面的查询,但只需添加x_id并仅投影x_id值。
示例:
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。
https://stackoverflow.com/questions/11255271
复制相似问题