私の問題への答えはランキングと関係があることを私は知っています、ただ正確に何をすべきかわからないだけです。私のステートメントの目標は、5つのレコードのみを取得することですが、特定のテーブルのレコードを別のテーブルよりも優先することです。
私は2つのテーブルを持っています:News
とNewsToLocation
。
ニューステーブルに4つのニュース項目があり、NewsToLocation
私の要件を満たす3つのニュース項目があるとしましょう。News
5つしか選択できないので、テーブルの4つが優先されることを確認してから、NewsToLocation
テーブルから1つだけを選択します。私の現在のクエリは反対のことをしていて、それを修正する方法を理解できません。
これがクエリ全体です。
SELECT
newSpotlights.*
FROM
(SELECT
TOP 5 n.news_id,
n.is_spotlight,
n.location_id,
n.news_title,
CAST(n.news_content AS varchar(200)) AS news_content,
n.writing_date,
n.publication_date,
n.end_date,
n.alt_uri,
n.youtube_code,
n.icon_img_file,
n.banner_img_file
FROM
(SELECT
n.news_id
FROM rcde_news n
WHERE n.location_id = 4
AND n.is_spotlight = 1 AND n.publication_date < GETDATE() AND n.end_date > GETDATE()
AND n.status_id = 2 /*2 = Active rcde_ItemStatus*/
UNION
SELECT
n.news_id
FROM rcde_newsToLocation ntl
INNER JOIN rcde_news n ON ntl.news_id = n.news_id
WHERE ntl.location_id = 4
AND n.status_id = 2 /*2 = Active rcde_ItemStatus*/
) AS News
INNER JOIN rcde_news n ON news.news_id = n.news_id
WHERE n.is_spotlight = 1
AND n.publication_date < GETDATE()
AND n.end_date > GETDATE()
ORDER BY publication_date DESC
) AS newSpotlights
最も内側のクエリにランク付けすることで、ある程度の順序付けができるはずだと思いますが、正確に何をすべきかわかりません。私はランキングをある程度理解していますが、UNION
ステートメントでそれをどのように行うかについての手がかりはありません。ユニオンのさまざまな部分でそれぞれランクとして1を選択し、ランクとして2を選択してから、ランク順に並べ替えるだけの簡単なことを実行できますか?