当前位置: 首页 > 面试题库 >

使用LEFT JOIN和INNER JOIN插入

凤衡
2023-03-14
问题内容

嗨,我正在尝试找出如何使用以下查询插入新记录的方法:

SELECT user.id, user.name, user.username, user.email, 
  IF(user.opted_in = 0, 'NO', 'YES') AS optedIn  
FROM 
  user
  LEFT JOIN user_permission AS userPerm ON user.id = userPerm.user_id
ORDER BY user.id;

INSERT到目前为止,我的查询是:

INSERT INTO user 
SELECT * 
FROM user 
  LEFT JOIN user_permission AS userPerm ON user.id = userPerm.user_id;

但是,我不确定VALUE('','','','', etc etc)使用左联接和内联接时该怎么做。

所以我想做的是这样的:

User 表:

id    | name       | username    | password                 | OptIn
--------------------------------------------------------------------
562     Bob Barker   bBarker       BBarker@priceisright.com   1

还有user_permission桌子

user_id   | Permission_id
-------------------------
562         4

更新 是这样的吗?

INSERT INTO user (name, username, password, email, opted_in) VALUES ('Bbarker','Bbarker','blahblahblah','Bbarker@priceisright.com',0);
INSERT INTO user_permission (user_id, permission_id) VALUES (LAST_INSERT_ID(),4);

问题答案:

您必须具体说明要选择的列。如果user表有四列id, name, username, opted_in,则必须从查询中准确选择这四列。语法如下:

INSERT INTO user (id, name, username, opted_in)
  SELECT id, name, username, opted_in 
  FROM user LEFT JOIN user_permission AS userPerm ON user.id = userPerm.user_id

但是,似乎没有任何理由反对user_permission此处,因为该表中的任何列都不会插入user。实际上,这INSERT似乎因主键唯一性冲突而失败。

MySQL不支持同时插入多个表。您需要INSERT使用第一个查询的最后一个插入ID在代码中执行两个语句,或者AFTER INSERT在主表上创建触发器。

INSERT INTO user (name, username, email, opted_in) VALUES ('a','b','c',0);
/* Gets the id of the new row and inserts into the other table */
INSERT INTO user_permission (user_id, permission_id) VALUES (LAST_INSERT_ID(), 4)

或使用触发器:

CREATE TRIGGER creat_perms AFTER INSERT ON `user`
FOR EACH ROW
BEGIN
  INSERT INTO user_permission (user_id, permission_id) VALUES (NEW.id, 4)
END


 类似资料:
  • 问题内容: 我想以以下方式实现sql查询: 我该如何使用或上面提到的方法来做到这一点? 问题答案: 是一个方法从查询类。 您可以尝试这样的事情。

  • 我阅读了kstream.leftjoin,但没有找到确切的区别。

  • 问题内容: 我需要一些帮助,以便在mongodb和nodejs中按日期查找记录。 我将日期添加到抓取脚本中的json对象中,如下所示: 该对象被插入到mongodb中。我可以看到如下: 然后在我的nodejs脚本中执行findOne(): 找不到对象。如果我从对象中删除last_updated字段,则会找到它,因此绝对是问题所在。 如果我按以下方式隔离字段: 什么也没有回来。请问我做错了什么? 问

  • 当我使用Flink SQL执行以下语句时,错误报告如下: 请求 根据< code>user_id字段对user_behavior_kafka_table中的数据进行分组,然后取出每组中< code>ts字段值最大的数据 Excute sql Flink 版本 1.11.2 错误消息 作业部署 在纱线上 表消息 < li >来自消费者kafka主题的user_behavior_kafka_table

  • 问题内容: 我一直在尝试找到一种使用Golang尤其是库gorm插入和检索几何类型的方法。我还尝试使用库orb,它为几何定义了不同的类型,并提供了不同格式之间的编码/解码。 Orb 已经为每种类型实现了和方法。这使得go’s 和函数可以使用除基本类型以外的其他类型。但是,Orb期望使用以众所周知的二进制(WKB)格式表示的几何。 orb文档显示,要实现此目的,您只需将字段包装在PostGIS函数中

  • 本文向大家介绍使用PHP CodeIgniter记录插入和显示,包括了使用PHP CodeIgniter记录插入和显示的使用技巧和注意事项,需要的朋友参考一下 让我们以员工管理为例, 步骤1:首先,您必须在数据库中以“ EmployeeManager”的形式创建新模式。在此架构中,创建表名称Employee并在其中添加以下字段。 您在这里准备好餐桌了。 第2步:现在您已经准备好数据库,是时候制作C