簡體   English   中英

從多個表查詢中選擇

[英]Select from many to many table query

我有一些表:

會議
SessionID int PK
創建日期時間
SiteId int FK

Tracking_Parameters
ParamID int PK
ParamName nvarchar

Session_Custom_Tracking
SessionID int FK
ParamID int FK
ParamValue nvarchar

Site_Custom_Parameters
SiteID int FK
ParamID int FK
ParamKey nvarchar

會話 :包含訪問者的唯一會話ID以及他們進入網站的時間。

Tracking_Parameters :包含您可能想要在網站上跟蹤的內容列表(即電子郵件打開,電子郵件點擊,文章查看等)

Site_Custom_Parameters :對於特定站點(表未顯示),聲明Tracking_Parameter的鍵值(即在查詢字符串或路徑中查找的鍵)

Session_Custom_Tracking :會話和跟蹤參數之間的鏈接,還包含我的應用程序找到參數時鍵的值。

題:

我想選擇會話ID,對於這些特定會話,Session_Custom_Tracking中有兩個不同ParamID的記錄。 我想找到一個用戶同時打開電子郵件(paramid 1)並點擊(paramid 3)該電子郵件中的鏈接的會話。

您可以兩次加入同一個表:

SELECT S.SessionID
FROM Sessions AS S
JOIN Session_Custom_Tracking AS SCT1
ON SCT1.SessionID = S.SessionID
AND SCT1.ParamID = 1
JOIN Session_Custom_Tracking AS SCT2
ON SCT2.SessionID = S.SessionID
AND SCT2.ParamID = 3

一個可能更容易閱讀的替代品(因為它更符合您描述問題的方式)是使用WHERE EXISTS

SELECT S.SessionID
FROM Sessions AS S
WHERE EXISTS
(
    SELECT *
    FROM Session_Custom_Tracking AS SCT1
    WHERE SCT1.SessionID = S.SessionID
    AND SCT1.ParamID = 1
)
AND EXISTS
(
    SELECT *
    FROM Session_Custom_Tracking AS SCT2
    WHERE SCT2.SessionID = S.SessionID
    AND SCT2.ParamID = 3
)

暫無
暫無

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

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