0
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 查询。我只需要在 ((y_Id = 1 AND z_Id = 1) AND (y_Id = 2 AND z_Id = 3)) 处选择 x_Id。因此,以这些数字为例,唯一应该选择的是 (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_id 和 x_id = 1 再次作为副本返回。

**我正在使用 sqlPro 和 MySql 5

4

3 回答 3

0

不需要联盟。

看到评论后更新:

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-29T02:24:14.480 回答
0

看到评论后更新:

使用聚合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-29T02:24:32.080 回答
0

如果您只对 x_id 值感兴趣,则可以使用上面的查询,但只需添加 DISTINCT 并仅投影 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。

于 2012-06-29T02:31:47.547 回答