簡體   English   中英

從表A和B中選擇,其中表A和表B中的記錄在表C中不存在?

[英]Select from table A and B, where records from table A and table B don't exist in table C?

我無法可視化要創建的查詢的設置。

我有表A(用戶)和表B(事件)。 對於每項活動,我都需要一個未參加的用戶列表。

我認為有必要使用第三個表,將用戶與事件相關聯,其中包含用戶和事件ID。 如果表中沒有用戶和事件ID組合,則該用戶未出席。

我的查詢需要如何查找才能返回未參加每個事件的每個用戶的列表?

或者,我可以查詢事件表,循環搜索結果,對於每個事件,我可以查詢在第三張表中沒有具有匹配事件ID的記錄的用戶。 這似乎效率低下,而且顯然是錯誤的,因為要進行許多其他的db調用。

foreach ($getEvents as $v) {
    SELECT userID FROM users WHERE userID NOT IN (SELECT userID FROM tableC WHERE eventID = '".$v["eventID"]."');
}

如有必要,樂意提供更多信息。

您可以通過生成所有用戶/事件組合來處理此問題。 然后 ,過濾掉確實存在的那些:

select e.event_id, u.user_id
from events e cross join
     users u left join
     userevents ue
     on ue.event_id = e.event_id and ue.user_id = u.user_id
where ue.event_id is null;

如果您只想要一個未參加單個事件的用戶列表,我們可以將用戶表加入聯接表C並完成。 但是,由於您需要所有事件的報告,因此我們需要一種不同的方法。 一種選擇是使用日歷表,該表代表每個用戶與每個事件的關系。 我們可以通過用戶和事件表之間的交叉聯接來生成該表。 然后,將該日歷表左連接到聯結表C

SELECT t1.userID, t1.eventID
FROM
(
    SELECT DISTINCT u.id AS userID, e.id AS eventID
    FROM users u
    CROSS JOIN events e
) t1
LEFT JOIN tableC t2
    ON t1.userID = t2.userID AND
       t1.eventID = t2.eventID
WHERE t2.userID IS NULL;

試試這個查詢!

SELECT
         e.event_id     AS 'Event ID'   , 
         u.user_id      AS 'User ID' 
    FROM
         events         e               ,
         users          u 
    WHERE 
          e.event_id NOT IN (SELECT event_id FROM userevents)
    AND   
          u.user_id  NOT IN (SELECT user_id FROM users)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM