2016-10-20 4 views
-1

私は180k行以上を返す1つのクエリを持っています。私はわずか10回しか戻らないように少し変更する必要があります。SQLクエリ経由で10行しか返す方法

結果として10行だけを表示するにはどうすればよいですか?

は私がEXCEPT試してみたが、ちょうど10

+2

* 2つのキューレスの違いを表示します。 –

+0

あなたの質問を私たちに提供できますか? – Imanez

+0

2台の車の違いを知りたい。まあ、どちら? –

答えて

1

あなたはLIMITを使用することができます。特に、彼らはそう簡単に作成している与えられた(とインデックスを作成することができます) -

一時表はあなたの友人もできます。これは、最初のn行を表示します。例:

SELECT * FROM Orders LIMIT 10 

ページ設定をOFFSETに追加しようとしている場合。 20行目から10行が返されます。例:

SELECT * FROM Orders LIMIT 10 OFFSET 20 
0

MySQLはEXCEPT(私の知る限り)をサポートしていませんよりも多くを返すようです。

おそらく最も効率的なルートを1つに2つのWHERE句を組み込むことであろう。私は効率的なと言っています。「このクエリを通常のレポートや運用アプリケーションで実行する場合は、このようにしてください。例えば

-- Query 1 
SELECT * FROM table WHERE `someDate`>'2016-01-01' 
-- Query 2 
SELECT * FROM table WHERE `someDate`>'2016-01-10' 
-- Becomes 
SELECT * FROM table WHERE `someDate` BETWEEN '2016-01-01' AND '2016-01-10' 

それはあなたがクエリが非常に複雑であることを意味している可能性だし、あなたがしている迅速(読み:必ずしも効率的ではない)の後のための違いを取得する方法一回限りの調査。ケースであること、あなたがUNIONとサブクエリを悪用することができることを

(未テスト、擬似SQLとして扱う...)

SELECT 
    * 
FROM (
    SELECT * FROM table WHERE `someDate`>'2016-01-01' 
    UNION ALL 
    SELECT * FROM table WHERE `someDate`>'2016-01-10' 
) AS sub 
GROUP BY 
    `primaryKey` 
HAVING 
    COUNT(1) = 1; 

これは、しかし醜いです。効率的ではありません。 唯一の違い片側は(私はそれ「右側」と呼びます)のみということである(左が含まれ行方不明レコードは、次の2つのクエリをLEFT JOIN可能性があることをと仮定すると

サブシステムとして)、右側にヌルにフィルタリングします。しかし、それは真実であるすべての警告に依存しているでしょう。

CREATE TEMPORARY TABLE tmp_xyz AS SELECT ... FROM ... WHERE ...; 
関連する問題