2015-12-12 97 views
0

嘗試找出SQL以在某個事件不在另一個表中時返回用戶列表。我意識到有幾種方法可以實現這一目標,但首選方法是什麼?我的下面是我的猜測,它不能根據需要運行。Oracle「NOT IN」查詢

SELECT 
    n.nid, 
    n.title, 
    u.uid, 
    u.mail 
FROM node n 
JOIN field_data_field_status fs   ON n.nid=fs.entity_id 
JOIN flagging f       ON n.nid=f.entity_id 
JOIN users u        ON f.uid=u.uid 
JOIN profile p        ON p.uid=u.uid 
WHERE n.nid='891' 
    AND n.type='tournament' 
    AND fs.field_data_field_status_value='In_progress' 
    AND p.pid NOT IN (select entity_id FROM field_data_field_selected_players)"; 

在這個例子中從field_data_field_selected_playersentity_id將等於p.pid

所以我基本上想要一個p.pid沒有field_data_field_selected_playersentity_id用戶名單。

+2

'不按需要工作'這告訴沒有用。詳細說明。 –

+1

這對你解釋爲什麼你的查詢不起作用,預期的結果是什麼以及你得到了什麼,還有一些測試數據和你的表結構會有幫助。 – Ollie

回答

1

您的查詢ommiting 型材沒有在field_data_field_selected_players,你說你希望它是用戶進行中省略的條目。所以基本上用戶沒有這樣一個條目的配置文件。 NOT IN條款因此必須尋找用戶

SELECT 
    n.nid, 
    n.title, 
    u.uid, 
    u.mail 
FROM node n 
JOIN field_data_field_status fs   ON n.nid=fs.entity_id 
JOIN flagging f       ON n.nid=f.entity_id 
JOIN users u        ON f.uid=u.uid 
WHERE n.nid='891' 
    AND n.type='tournament' 
    AND fs.field_data_field_status_value='In_progress' 
    AND u.uid NOT IN 
    (
    select p.uid 
    from profile p 
    where p.pid IN (select entity_id FROM field_data_field_selected_players) 
); 

當然可以用EXISTS/NOT EXISTS完成。這主要是個人喜好選擇的問題。我經常更喜歡IN/NOT IN,因爲它們簡單。