我有一个包含以下架构的表
UserId,notication_detail,notification_sent either 1 or 0
对于不同的用户会有很多通知,例如userId=10
的10个通知或userId=3
的4个通知(表中有4个不同的行。对于特定的UserId可能没有通知。我是什么意思我想做的是单独为所有用户发送Unsent通知并邮寄它们。我不能在这里使用UserId组。
select * from table where UserId="" and notification_sent=0
,这是1个用户的正常情况,但我需要检查该表的不同ID
任何可以帮助我的人
答案 0 :(得分:0)
假设您的数据库有这两个表:User(UserID-PK,UserName,...)
和Notification(NotificationID-PK,UserID,notification_sent,...)
,那么您可以使用此查询为每个用户获取以下列:HasNotifications
(1,0)和{ {1}}(1,0):
HasUnsentNotifications
但是,如果您需要一个列表,其中包含那些没有通知的用户以及那些拥有未发送通知的用户,那么您可以使用另一个查询:
SELECT u.UserID,u.UserName,
CASE WHEN EXISTS(
SLEECT *
FROM Notification n
WHERE u.UserID=n.UserID ) THEN 1 ELSE 0 END HasNotifications,
CASE WHEN EXISTS(
SLEECT *
FROM Notification n
WHERE u.UserID=n.UserID AND n.notification_sent=0) THEN 1 ELSE 0 END HasUnsentNotifications
FROM User n
WHERE n.UserID IN (3,10,...)
编辑1(SQL Server):
如果您不知道有多少用户需要运行查询,那么您可以使用表变量:
SELECT u.UserID,u.UserName,
CASE WHEN n.NotificationID IS NOT NULL THEN 1 ELSE 0 END HasNotifications,
n.NotificationID,n.notication_detail
FROM User u LEFT OUTER JOIN Notification n ON u.UserID=n.UserID
WHERE (n.notification_sent=0 -- Has unsent notifications
OR n.NotificationID IS NULL)
WHERE n.UserID IN (3,10,...)
或
DECLARE @SelectedUsers TABLE(UserID INT PRIMARY KEY);
INSERT @SelectedUsers (UserID) VALUES (3);
...
INSERT @SelectedUsers (UserID) VALUES (10);
SELECT ...
FROM User n
WHERE n.UserID IN (SELECT UserID FROM @SelectedUsers)