2017-09-12 48 views
2

我有一個使用子查詢的sql查詢。如何優先考慮或條件超過其他條件的MySQL?

SELECT t.id FROM subjects t 
where t.topic_id IN (13,11) 
    AND t.id not in (select subject_id 
        from user_visited_subjects uvs 
        where uvs.user_id = 3) 
    OR t.id in (select subject_id 
       from user_subject_suggestions uss 
       where uss.user_id = 3) 
limit 10 

我想給優先級或條件意味着SQL應檢查是否有查詢的任何記錄

OR t.id in (select subject_id from user_subject_suggestions uss where uss.user_id = 3) 

再檢查其他條件。

請指教。

謝謝

+3

你試圖把括號身邊? –

+0

你可以提供一些樣本數據嗎?目前還不清楚你的意思是「優先」。它是一個括號問題嗎(所以你現在沒有限制,得到錯誤的行和/或不按照你想要的方式進行混合),還是你的意思是滿足第一個條件的行(=更重要?)應該在其他人的面前訂購(爲此您需要'訂購')。 – Solarflare

回答

0

只需使用圓括號。

例子:

SELECT t.id FROM subjects t 
WHERE t.id IN (SELECT subject_id FROM user_subject_suggestions uss WHERE uss.user_id = 3) 
    OR (t.topic_id IN (13,11) 
     AND t.id NOT IN (SELECT subject_id FROM user_visited_subjects uvs WHERE uvs.user_id = 3)) 
LIMIT 10 
+0

謝謝,我正在測試它。 – Rich5757

+0

對不起,仍然「或」條件沒有優先權,如果OR子查詢中有任何結果應該顯示,但它沒有發生。 – Rich5757

+0

對不起,但問題是有點不清楚:(所以你想檢查't.id'是否在'user_subject_suggestions'或('topic_id IN(13,11)'AND'tid'在'user_visited_subjects')?我更新了我的答案。 – Neodan