Mysql查询问题,列不为空插入行的情况

Posted

技术标签:

【中文标题】Mysql查询问题,列不为空插入行的情况【英文标题】:Mysql query issue, case when column is not null insert row 【发布时间】:2014-06-25 23:32:01 【问题描述】:

这是我的查询:

SELECT vehicle,
CASE 
WHEN vehicle IS NOT NULL
THEN (INSERT INTO tbl_vehicle_on_user (vehicle, userid) values
(SELECT `vehicle` FROM `tbl_missions` WHERE `id` = 4 ), (SELECT `id` FROM `tbl_users`     WHERE `id` = 12))
FROM tbl_missions WHERE id = 4;

当车辆在 id 4 上不为空时,我需要向 tbl_vehicle_on_user 插入一行。 当我执行此查询时,我从 mysql 工作台收到此错误,

01:24:49 选择车辆,当车辆不为空时,然后(插入到 tbl_vehicle_on_user(车辆,用户 ID)值(SELECT vehicle FROM tbl_missions WHERE id = 4),(选择 id FROM tbl_users WHERE id = 12)) FROM tbl_missions WHERE id = 4 错误代码:1064。您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 'INTO tbl_vehicle_on_user (vehicle, userid) 值附近使用的正确语法(SELECT vehicle FROM `tbl_mi' at line 4 0.000 sec

当我将鼠标悬停在“INTO”下方时,会出现一条红线,上面写着“语法错误,意外 INTO,期待 ('。

我不知道这意味着什么

谢谢!!

【问题讨论】:

Select 语句是要查看的列的投影,与 CRUD 语句不兼容。这是一个正确解决您的问题的答案:***.com/questions/12587929/… 感谢您的回答,但这对我来说似乎太难了,您能为我做吗.. 我对 SQL 还不是很有经验.. 【参考方案1】:

如果您已经知道 userid 应该是 12,那么只需使用 12 而不是 SELECT id FROM tbl_users WHERE id = 12。这是一个有效的insert-select 声明。

INSERT INTO tbl_vehicle_on_user (vehicle, userid)
SELECT `vehicle`, 12 userid 
FROM `tbl_missions` 
WHERE `id` = 4 and vehicle is not null;

【讨论】:

我不知道它是否会是 12,这只是一个例子,我也不知道 id 是否会是 4.. 抱歉,我之前没有提到。跨度> tbl_missions 和 tbl_users 是什么关系?如果不是4,你的意思是所有的id吗? 嗯,tbl_missions 有时确实有一个不是 NULL 的车辆列,如果这是真的,那么我需要来自 tbl_users 的 id 和来自 tbl_missions 的 id 并将它们放在一个表中 (tbl_vehicle_on_user)。 4和12是用户在php中生成的,所以4是登录用户的id,12是他选择的missionid。 @Anwar,你能发布所有 3 个表的架构以及它们是如何链接的吗? 抱歉,我现在没有访问权限,您能建议一些应该做的事情吗?

以上是关于Mysql查询问题,列不为空插入行的情况的主要内容,如果未能解决你的问题,请参考以下文章

php mysql批量或批量更新多列和多行但如果列不为空则不更新

如果特定列不为空,则 Google 表格导入范围

基于大多数行的分配顺序在mysql数据库中不为空

MySql笔记

SQL:如何在 B 列不为空的情况下使用“100”更新 A 列

mysql查询语句集