我有以下查询从事件表中提取事件。
目标:我想从事件表中选择事件,但首先要查看已登录的用户是否已参加该事件。 如果是,则不要显示该事件。
我有一个注册表,它是'users'和'events'表之间的'事务'表。 “用户”表中的字段“ID”是PK,其FK位于“客户”字段下的“注册”表中。 'events'表中的字段'ID'是PK,'signup'表中的FK是字段'eid'。
到目前为止我所拥有的:
SELECT
id,
name,
DATE_FORMAT(
date,
'%W, %b %e %Y %l:%i %p'
) date,
date orderByDate,
shortDesc,
summary,
street,
city,
state,
zip,
private
FROM
events
WHERE
zip = 93101
AND approved = 1
AND date > sysdate();
我觉得我需要使用关键字EXISTS来首先检查并查看登录用户是否在“注册”表中存在记录,但是我那可怜的农民大脑似乎无法弄清楚查询。 感谢所有帮助,到目前为止,每个人都对我的所有SQL问题感到非常惊讶。还在学习很多东西。 :)
答案 0 :(得分:1)
您需要not exists
,因为您想在signup
表中获取给定用户没有相应记录的记录:
SELECT id, name, DATE_FORMAT(date, '%W, %b %e %Y %l:%i %p') date, date orderByDate, shortDesc, summary, street, city, state, zip, private
FROM events
WHERE zip = 93101
AND approved = 1
AND date > sysdate()
AND NOT EXISTS (SELECT 1 FROM signup WHERE signup.eid=events.id and signup.customer=...);
替换用户ID代替...
答案 1 :(得分:0)
假设您已经拥有要为其获取事件的userId,您的查询可能看起来像 -
SELECT
id,
name,
DATE_FORMAT(
date,
'%W, %b %e %Y %l:%i %p'
) date,
date orderByDate,
shortDesc,
summary,
street,
city,
state,
zip,
private
FROM
events
WHERE
zip = 93101
AND approved = 1
AND date > sysdate()
AND id NOT IN (
SELECT
eid
FROM
signup
WHERE
customer == <your-customer-id>
);