INSERT INTO yq_sbcrk_qd_copy ( F_CreatorUserId, F_CreatorTime, org_code, djh, rkzl, gslb, gmsj, rcksj, rck, qdid ) SELECT F_CreatorUserId, F_CreatorTime, org_code, sb_djh, sb_rkzl, sb_gslb, sb_gmsj, sb_rksj, '入库', F_Id FROM yq_sb_rk WHERE yq_sbcrk_qd_copy.qdid = yq_sb_rk.F_Id AND yq_sb_rk.F_Id = '428513248992565445'这个SQL有错误吗
时间: 2024-04-28 12:20:04 浏览: 205
这个SQL语句有错误。正确的语句应该是:
INSERT INTO yq_sbcrk_qd_copy (F_CreatorUserId, F_CreatorTime, org_code, djh, rkzl, gslb, gmsj, rcksj, rck, qdid)
SELECT F_CreatorUserId, F_CreatorTime, org_code, sb_djh, sb_rkzl, sb_gslb, sb_gmsj, sb_rksj, '入库', F_Id
FROM yq_sb_rk
WHERE F_Id = '428513248992565445' AND F_Id NOT IN (SELECT qdid FROM yq_sbcrk_qd_copy);
这个SQL语句的意思是:将yq_sb_rk表中F_Id='428513248992565445'的记录插入到yq_sbcrk_qd_copy表中,并将rck字段设置为'入库'。同时,确保yq_sb_rk表中的F_Id字段与yq_sbcrk_qd_copy表中的qdid字段不重复,以避免重复插入。
注意,这里使用了一个子查询来确保不重复插入。这个子查询返回yq_sbcrk_qd_copy表中所有的qdid值,如果yq_sb_rk表中的F_Id也在这些值中,则不会插入。这样可以避免重复插入相同的记录。
相关问题
INSERT INTO yq_sbcrk_qd_copy ( F_CreatorUserId, F_CreatorTime, org_code, djh, rkzl, gslb, gmsj, rcksj, rck ) SELECT F_CreatorUserId, F_CreatorTime, org_code, sb_djh, sb_rkzl, sb_gslb, sb_gmsj, sb_rksj, '入库' FROM yq_sb_rk WHERE yq_sbcrk_qd_copy.qdid = yq_sb_rk.F_Id AND yq_sb_rk.F_Id = '428513248992565445'运行以后报错以下信息Unknown column 'yq_sbcrk_qd_copy.qdid' in 'where clause'
这个错误是因为在 WHERE 子句中使用了 yq_sbcrk_qd_copy.qdid 字段,但是这个字段在表中不存在。
可能的原因是:
1. yq_sbcrk_qd_copy 表中确实没有 qdid 字段,你需要检查表结构。
2. qdid 字段名拼写错误,你需要确认字段名是否正确。
3. SQL 语句的逻辑错误,你需要检查 SQL 语句的正确性。
如果确保表结构和字段名无误,可以检查 SQL 语句的逻辑是否正确。例如,可能需要使用 JOIN 子句来将 yq_sb_rk 表与 yq_sbcrk_qd_copy 表连接起来。
sqlsever 有表DTG_AnswerRecord其中包含字段CreatorUserId,CreatorTime 我想查 CreatorUserId连续5次IsCorrect为0的数据
在SQL Server中,如果你想查询`DTG_AnswerRecord`表中`CreatorUserId`连续5次`IsCorrect`值为0的数据,可以使用窗口函数(Window Function)和自连接(Self Join)来实现。假设`IsCorrect`字段是一个布尔类型的列,你可以尝试使用下面的SQL查询:
```sql
WITH CTE_AnswerHistory (CreatorUserId, CurrentRow, CorrectCount)
AS
(
SELECT CreatorUserId, IsCorrect,
ROW_NUMBER() OVER (PARTITION BY CreatorUserId ORDER BY CreatorTime) as RowNum
FROM DTG_AnswerRecord
)
SELECT CreatorUserId
FROM CTE_AnswerHistory AS A
JOIN CTE_AnswerHistory AS B ON A.CreatorUserId = B.CreatorUserId AND A.RowNum - B.RowNum = 4
WHERE A.IsCorrect = 0 AND B.IsCorrect = 0
GROUP BY CreatorUserId
HAVING COUNT(DISTINCT CASE WHEN B.IsCorrect = 0 THEN 1 END) >= 5;
```
这个查询首先创建了一个名为`CTE_AnswerHistory`的临时结果集,其中包含了每个用户每条记录的`CreatorUserId`、`IsCorrect`以及按用户分组的行号。然后通过`JOIN`操作找到当前用户前四次的记录,并筛选出这五次`IsCorrect`都为0的情况。
阅读全文