我是一名实习生,这是我的第一份工作,很抱歉问了这个愚蠢的问题和糟糕的英语。
CREATE SCHEMA code
CREATE TABLE code.place (
pk_place_id VARCHAR(8),
place_name VARCHAR (50),
CONSTRAINT pk_place_id PRIMARY KEY (pk_place_id)
);
CREATE TABLE code.user (
pk_user_id VARCHAR(3),
user_name VARCHAR (50),
CONSTRAINT pk_user_id PRIMARY KEY (pk_user_id)
);
CREATE TABLE code.visit (
pk_user_id VARCHAR(3),
pk_place_id VARCHAR(8),
data DATE,
CONSTRAINT pk_user_id FOREIGN KEY (pk_user_id) REFERENCES code.user,
CONSTRAINT pk_place_id FOREIGN KEY (pk_place_id) REFERENCES code.place
);
我需要制作一个表格,显示用户可以去的地方,条件是它不显示他们在过去6个月里去过的任何地方。
老实说,我在这里很迷茫,我是一名实习生,我的主管对编码一无所知(我对此了解不多(,只是管理人员。。。
更新:
我尝试了以下代码。
SELECT *
FROM code.visit
WHERE data >= (curdate() - INTERVAL (1 - DAY(curdate()) DAY) -INTERVAL 6 MONTH;
但什么都没发生,它甚至没有说它错了,我唯一注意到的是终端看起来不像:
code=>
code->
code->
看起来像
code(>
code(>
code(>
AND在我关闭并打开终端之前,没有其他代码工作
UPDATE,它解决了它,以及关于终端的事情,我只是忘记了关闭代码(;哈哈,谢谢大家。
建议您查看文档中的所有日期/时间函数。对于这个问题,age()
和区间将特别有用。
要获得用户不能去的地方id的列表:
-- get list of place id's where user CANNOT go
SELECT pk_place_id
FROM code.visit
WHERE pk_user_id = '123'
AND age(data) <= interval '6 months'
要获得用户可以去的地方的列表,您需要一个所有地方的列表减去用户不能去的地方:
SELECT place_name
FROM code.place
WHERE pk_placed_id NOT IN (SELECT pk_place_id
FROM code.visit
WHERE pk_user_id = '123'
AND age(data) <= interval '6 months')
可能有一种聪明的方法可以将这三个表组合起来,列出所有用户和他们可以去的地方,但我的SQL技能还不够好,不知道如何做到这一点。