2017-01-14 20 views
0

を使用してUNIONで排除重複私は、彼らが次のソリューションを提供するために、この問題が見つかりました:SQL - ALL toptal.comでWHERE句

SELECT * FROM mytable WHERE a=X UNION ALL SELECT * FROM mytable WHERE b=Y AND a!=X 

を誰かがここにXとYの使用法を説明できますか?これらの変数はありますか?これはMySQLでもこのように動作しますか?私はこの種のクエリをテストサーバー上で実行するようには見えません。 !

キーがAND = Xの一部です:

はまた、彼らは以下の請求を行います。これにより、UNION(a.k.a.、UNION DISTINCT)コマンドのメリットが得られますが、パフォーマンスが大幅に低下することはありません。

これが真であれば、なぜユニオンDISTINCTを使用するのですか?特に、これがおそらくより効率的な方法で実装されないのはなぜですか?

答えて

0

次のようなWHERE句でのORを使用することができます。

SELECT * 
FROM mytable 
WHERE a=X OR (b=Y AND a!=X); 
+0

これはどのようにUNIONを実行していますか? XとYは何ですか? aとbは何ですか?複数の列がある場合は機能しますか? – akkarin

1

xは「本当の」フィルタのためにその擬似コードでプレースホルダです。フィールドaはあなたのユニオンの両側に複製される唯一のものであるが、クエリオプティマイザはそうではないかもしれないことを知っているかもしれない。その答えは、データのコンテキストに応じて特定の状況でのみ適用されます。

よく書かれた質問ではありません。