【发布时间】:2020-01-04 00:49:27
【问题描述】:
忽略问号(对于 Java 准备语句),但此查询用于跟踪谁正在查看特定报销,并在当前查看时将其姓名存储在“whose_hands”字段中。如果他们的用户名以及他们查看过的 reimb_id 位于查看的表中,则他们无法再次填充 who_hands 字段。这样做的目的是在不重复查看者的情况下将报销形式传递给用户链。它不允许我使用最后的 WHERE 子句,因为我可以将用户名插入到特定的报销记录中。有解决办法吗?
INSERT INTO reimbursements(whose_hands)
VALUES(
select username
from users u
join department d on u.department_id=d.department_id
WHERE position = 'DeptHead'
AND NOT EXISTS(
SELECT username,reimb_id
FROM viewed v
WHERE v.username = u.username
and reimb_id=?)
where reimb_id = ?));
【问题讨论】:
-
那么您是要在报销表中插入新记录还是更新表的某一列值?
-
样本数据和期望的结果将阐明您想要做什么。
-
“为什么我不能在 INSERT 语句中使用 WHERE 子句进一步压缩我的查询?” 因为 SELECT 语句只能有 一个 WHERE子句,你有 两个。尝试使用 AND 代替。虽然你也会发现 INSERT ... VALUES (SELECT....) 是错误的,它应该只是 INSERT ... SELECT