2017-07-10 7 views
0

を返し、私はこのクエリMySQLの連合は重複

(
SELECT u.Id, 1 AS which 
FROM users u 
JOIN user_opt uo ON u.id = uo.UserId 
WHERE uo.country 
IN (
'Spain', 'Azerbaijan' 
) 
AND uo.Hobbies REGEXP 'Astronomy' 
LIMIT 100 
) 
UNION (

SELECT u.Id, 2 AS which 
FROM users u 
JOIN user_opt uo ON u.id = uo.UserId 
WHERE uo.country 
IN (
'Spain', 'Azerbaijan' 
) 
LIMIT 100 
) 
ORDER BY which 

を持っていると私は、このクエリでUNIONを使用するので、私は、これは重複行を返すrows.But重複し得るべきではありません。

+0

'は'両側で異なる値を持っています。質問を編集するか、本当にやりたいことを説明する別の質問をしてください。 –

+0

それは私がそれを並べ替えることができるように異なる値を持っています@GordonLinoff – sakoaskoaso

+0

あなたは何をしたいですか? 200行、各100から?または、100行未満の場合は、正規表現と一致する可能性のある正確に100行といくつかの追加行がありますか? – dnoeth

答えて

0

次の操作を行うことによって、あなたが望むものにかなり近づくことができる必要があります:これは最初の最初のグループを置くためにを保証されません

(SELECT u.Id, 1 AS which 
FROM users u JOIN 
     user_opt uo 
     ON u.id = uo.UserId 
WHERE uo.country IN ('Spain', 'Azerbaijan') AND 
     uo.Hobbies REGEXP 'Astronomy' 
LIMIT 100 
) 
UNION ALL 
(SELECT u.Id, 1 AS which 
FROM users u JOIN 
     user_opt uo 
     ON u.id = uo.UserId 
WHERE uo.country IN ('Spain', 'Azerbaijan') AND 
     uo.Hobbies NOT REGEXP 'Astronomy' 
LIMIT 100 
) 

。しかし実際にはそうです。

+0

しかし最初のクエリから結果を得たいのですが、 ORDER BY ' – sakoaskoaso

+0

@ sakoaskoaso。 。 。実際には、これはあなたが望むことをするでしょう。 SQLのルールやMySQLのドキュメント(私が知る限り)によって保証されるわけではありません。しかし、それはMySQLが実装されているためです。これは 'union'ではなく' union all'を使うことに注意してください。 –

+0

なぜユニオンを選んだのですか?私が知っている限り、組合は重複なしで返します – sakoaskoaso