2017-02-18 8 views
1

リレーションが複数の行にある場合に結果をフィルタリングしようとしていますので、最初に値を一致させてIDを取得し、同じ表から取得した値の別の行。Mysql複数の行の結果を2つのクエリでフィルタリングする方法

ID - MetaKey - MetaValue 
142398 - _wc_checkout_add_on_id - 4 
142398 - _wc_checkout_add_on_value - wife 
142398 - _wc_checkout_add_on_label - Wife 

だから私は今、私は最終的な結果を生成するために、2番目と3番目の行のmetavalueを取得したい、同じクエリ内で、私は、現時点ではそうすることができません、キーと行1から値マッチングを経由してIDを取得します。

誰でもお勧めできますか?

答えて

1

このような何かが動作します:

SELECT t2.* 
FROM yourTAble t1 
LEFT JOIN yourTable t2 
    ON t1.id = t2.id 
    AND NOT t2.MetaKey = t1.MetaKey 
WHERE t1.id = 142398; 
2

あなたがサブクエリでそれを行うことができ、例えば:

SELECT * 
FROM table 
WHERE id IN (
SELECT id FROM table WHERE metaKey = ? AND metaValue = ? 
); 

これは、あなたにそのIDに属するすべてのレコードを与えるだろう。あなたは、結果の最初の行をしたくない場合は今、あなたがITMを除外CA、例えば:

SELECT * 
FROM table 
WHERE id IN (
SELECT id FROM table WHERE metaKey = ? AND metaValue = ? 
) 
AND metaKey <> ? AND metaValue <> ?; 
+0

結果も含まROW1 –

+0

問題に言及していない(つまり、最初の行が除外される必要があるかどうか)とにかくそれを除外する別のクエリを追加しました。 –

+0

OK、 –

関連する問題