7

テーブルがあり、ある注文で 15 個の値を取得し、別の注文で 15 個の値を取得したいと考えています。目的は、正確に 30 個の異なる値を取得することです。
これは私のコードです:

 (SELECT * FROM table1 WHERE criteria ORDER BY views DESC LIMIT 15)  
  UNION All  
 (SELECT * FROM table1 WHERE criteria ORDER BY date_upload DESC LIMIT 15) 

2 つのクエリ ( NOT IN を使用) でタスクを完了する方法は知っていますが、1 つのクエリでそれを行う方法はありますか?

4

4 に答える 4

2

必要に応じて、「id」を主キーの名前に置き換えます。

(SELECT * FROM table1 WHERE criteria ORDER BY views DESC LIMIT 15)
UNION
(SELECT * FROM table1 WHERE criteria AND id NOT IN(SELECT id FROM table1 WHERE criteria LIMIT 15) ORDER BY date_upload DESC LIMIT 15)

このクエリ:
-ビューで並べ替えられた上位15のレコード一致基準
を選択します-最初のSELECTではなく、上位15の一致基準を選択し、date_uploadで並べ替えます

このクエリを使用すると、table1で30個の個別のレコードが使用可能になるたびに、必ず30個のレコードを取得できます。

于 2012-06-27T17:28:03.057 に答える
0
WITH combined
AS
(
    SELECT * from table1
    union 
    SELECT * from table2
)
SELECT TOP 30 * FROM combined ORDER BY date_uploaded

注: UNION で * を使用することはお勧めできません。フィールドをリストすることをお勧めします。

于 2012-07-26T04:07:11.210 に答える
0

それがあなたが探しているものかどうかはよくわかりませんが、いつでもこれを副選択でラップし、外側の SELECT で DISTINCT を使用して結果をフィルター処理できます。もちろん、30 件の検索結果が返されるという保証はありません。

SELECT DISTINCT * FROM (
    (SELECT * FROM table1 WHERE criteria ORDER BY views DESC LIMIT 15)  
     UNION All  
    (SELECT * FROM table1 WHERE criteria ORDER BY date_upload DESC LIMIT 15) 
) AS a

ただし、サブセレクトに高い制限を設定し、外側のセレクトに追加の制限を追加することはできます...

于 2012-05-14T14:20:12.960 に答える
-1

UNION ALL は、Distinct と UNION ALL を台無しにする代わりに、重複レコードを一覧表示します。独自の値を提供する「UNION」を試してください。

これを試して!

トップ 15 を選択 * テーブル 1 から UNION トップ 15 を選択 * テーブル 1 から ORDER BY date_upload

于 2012-05-22T10:54:46.697 に答える