Comment je peux rejoindre la table d'utilisateurs dans la requête ci-dessous. J'ai un nom d'utilisateur dans ma table d'utilisateurs que je souhaite afficher avec les résultats de la requête ci-dessous. Je veux me joindre à Userid à partir de la table des utilisateurs afin que je puisse récupérer des enregistrements à partir de la table des utilisateurs.
SELECT * FROM ( select User_id ,login_date AS EventTime,'Login' AS ACTION from Users_Login_Log(nolock) where login_date > '2019-12-23 00:00:00.000' UNION select UserID, EventTimeStamp AS EventTime , 'Logout' AS ACTION from EventTrackLog(nolock) where EventName = 'Default.Logout.Clicked' and EventTimeStamp > '2019-12-23 00:00:00.000' ) AS ES ORDER BY User_id DESC, EventTime DESC
3 Réponses :
Vous pouvez utiliser rejoindre code> sur la table dérivée. En outre, vous devez utiliser union tout code> plutôt que union code>, de sorte que la requête n'aboutit pas en hauteur pour supprimer des doublons: select u.user_name, es.*
from ((select User_id, login_date as EventTime, 'Login' AS action
from Users_Login_Log
where login_date > '2019-12-23'
) union all
(select User_ID, EventTimeStamp AS EventTime, 'Logout' as action
from EventTrackLog
where EventName = 'Default.Logout.Clicked' and
EventTimeStamp > '2019-12-23'
)
) es join
users u
on es.User_Id = u.User_Id
order by es.User_id desc, es.EventTime desc;
SELECT * FROM ( select User_id ,login_date AS EventTime,'Login' AS ACTION from Users_Login_Log(nolock) where login_date > '2019-12-23 00:00:00.000' UNION select UserID, EventTimeStamp AS EventTime , 'Logout' AS ACTION from EventTrackLog(nolock) where EventName = 'Default.Logout.Clicked' and EventTimeStamp > '2019-12-23 00:00:00.000' ) AS ES join userTable on es.user_id = userTable.user_id ORDER BY User_id DESC, EventTime DESC
Je suggérerais de ne pas nier la requête pour Union code> mais simplement rejoindre la table d'utilisateurs avec un ensemble de requêtes et commandez-le à l'aide du nom d'alias comme ci-dessous: SELECT ull.User_id AS UserID,
ull.login_date AS EventTime,
'Login' AS ACTION
FROM Users_Login_Log(nolock) ull
INNER JOIN usersTable ut ON ut.user_id = ull.user_id
WHERE login_date > '2019-12-23 00:00:00.000'
UNION
SELECT et.UserID,
et.EventTimeStamp AS EventTime ,
'Logout' AS ACTION
FROM EventTrackLog(nolock) et
INNER JOIN usersTable ut ON ut.user_id = et.user_id
WHERE et.EventName = 'Default.Logout.Clicked'
AND et.EventTimeStamp > '2019-12-23 00:00:00.000'
ORDER BY UserID DESC, EventTime DESC
Mais je vois que vous avez utilisé union dans cette requête
Oui, j'ai utilisé Union code> dans la requête principale mais récupérez et combine les données de données de deux tables différentes. Au-dessus, j'ai dit, nous pouvons simplement utiliser Union code> dans la requête principale au lieu d'utiliser dans la sous-requête.
Cette requête n'a pas de sens. Vous obtiendrez des lignes d'événementTracklog pour certains utilisateurs qui ne sont probablement pas le même utilisateur. Pourquoi n'utilisez-vous pas de rejoindre ici? Ou peut-être que ces deux choses sont isolées et que vous devez rejoindre tout ce genre à votre table d'utilisateurs? Aucune idée. Les données d'échantillonnage et la sortie souhaitée aideraient considérablement ici.
@Seanlange: Pouvez-vous me suggérer comment vous écrirez d'écrire une requête en ci-dessus?