3

私はいくつかのテーブルを持っています:

セッション
SessionID int PK
Created datetime
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 に 2 つの異なる ParamID のレコードがあります。ユーザーがメールを開き (paramid 1)、そのメール内のリンクをクリック (paramid 3) したセッションを見つけたいと考えています。

4

1 に答える 1

2

同じテーブルに 2 回参加できます。

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
)
于 2012-08-23T16:50:51.417 に答える