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_ids と 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 に答える