MySql多表联结查询与多表关联数据同时删除

left join语法

 代码如下 复制代码

table_references:
    table_reference [, table_reference] …
 table_reference:
    table_factor
  | join_table
 table_factor:
    tbl_name [[AS] alias]
        [{USE|IGNORE|FORCE} INDEX (key_list)]
  | ( table_references )
  | { OJ table_reference LEFT OUTER JOIN table_reference
        ON conditional_expr }

例:

 代码如下 复制代码

mysql> CREATE TABLE `product` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `amount` int(10) unsigned default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1
 
mysql> CREATE TABLE `product_details` (
  `id` int(10) unsigned NOT NULL,
  `weight` int(10) unsigned default NULL,
  `exist` int(10) unsigned default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
mysql> INSERT INTO product (id,amount)
       VALUES (1,100),(2,200),(3,300),(4,400);
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0
 
mysql> INSERT INTO product_details (id,weight,exist)
       VALUES (2,22,0),(4,44,1),(5,55,0),(6,66,1);
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

查询

 代码如下 复制代码

mysql> SELECT * FROM product LEFT JOIN product_details
       ON (product.id = product_details.id)
       AND product.amount=200;
+----+--------+------+--------+-------+
| id | amount | id   | weight | exist |
+----+--------+------+--------+-------+
|  1 |    100 | NULL |   NULL |  NULL |
|  2 |    200 |    2 |     22 |     0 |
|  3 |    300 | NULL |   NULL |  NULL |
|  4 |    400 | NULL |   NULL |  NULL |
+----+--------+------+--------+-------+
4 rows in set (0.01 sec)

超级简单吧,那么有朋友问我怎么在MySQL中实现多表关联数据同时删除

category中的id(栏目编号)字段作为该表的主键(primary key).唯一标识了一个栏目的信息。
news 中的id字段作为该表的主键(primary key).唯一标识了一个栏目的信息。

category_id(栏目编号)字段与category表的id字段相关联。

1.SQL删除语句

 代码如下 复制代码

delete category,news from category left join news on category.id = news.category_id

时间: 2024-10-23 02:54:51

MySql多表联结查询与多表关联数据同时删除的相关文章

SQL中多表联结查询的效率笔记

最近做网站的时候遇到一个问题,我需要输出B表和C表中的两个字段,不过纠结的是,程序所得到的参数是A表中的id,而A表与B表及C表关联的是另一个字段.如此一来,我就需要从3个表中读取数据,刚开始我想用SQL的多表联结查询,可是又担心效率太低.如果我先读出A表中与B.C关联的字段的值,再运行另一条SQL语句使用该值读取B.C表中的值效率是否会高一些?思索良久,最终决定写一个程序来测试. 以下代码以Discuz!X2.5的数据库为例,查询tid为1的主题发表者的username.  代码如下 复制代码

sql中怎样在多表联合查询后的表中进行增删改操作,新手求大神详细讲解

问题描述 sql中怎样在多表联合查询后的表中进行增删改操作,新手求大神详细讲解 我在C#的winform的DataGridView中显示联合查询的结果,下面就是4张表的联合查询的语句,我需要在DataGridView显示的表中做删除操作,只需要知道删除的sql语句就行,用存储过程也好,级联删除也好,希望详细,我已经在这个问题上困扰很久了,万分感谢! 解决方案 在做C#桌面程序时,我们通常会遇到删除dataGridview中选中的一和或都多行数据,在网上查了好多方法,有些只能删除dataGridv

mysql LEFT JOIN多表联结查询

具体操作 MySQL支持Select和某些Update和Delete情况下的Join语法,具体语法上的细节有:  table_references:     table_reference [, table_reference] -  table_reference:     table_factor   | join_table  table_factor:     tbl_name [[AS] alias]         [{USE|IGNORE|FORCE} INDEX (key_lis

mysql中LEFT JOIN查询两个表的差集

  今天在做一个微信墙的抽奖程序的时候遇到了一个问题,我需要查询量表的差集,业务情形是这样的 一个表用来保存抽奖用户的(www.111cn.net 一个人可能会有多条数据),而另一张表保存的是中奖的用户,我需要报么有中奖的所用用户查找出来,刚开始用的是where进行多表关联查询,但是最终发现当中奖表中么有数据的时候是查找不到任何信息的,改用LEFT JOIN 用这个就很简单了,  代码如下   DESC SELECT *  FROM  `enet_wall_list` AS l LEFT JOI

MySQL多表关联数据同时删除sql语句

DELETE删除多表数据,怎样才能同时删除多个关联表的数据呢?这里做了深入的解释:  代码如下 复制代码 1    delete from t1 where 条件 2    delete t1 from t1 where 条件 3    delete t1 from t1,t2 where 条件 4    delete t1,t2 from t1,t2 where 条件 category(栏目信息表)和news(新闻数据表). category中的id(栏目编号)字段作为该表的主键(primar

hibernate-求java两表循环查询的方法

问题描述 求java两表循环查询的方法 表A和表B的ID___RECEIVEID相关联,如何用表A查询到表B的ID_RECEIVEID_OLD, 再利用所取到的ID_RECEIVEID_OLD去查询表A的信息,不断循环,直到表B没有ID_RECEIVEID_OLD,求具体写法 解决方案 hibernate左连接 解决方案二: 表A: 表B: 解决方案三: Java循环和方法 解决方案四: 建议不要这样做 这样数据库会不断的 关闭打开 建议直接写sql函数 那样效率更高 更安全 解决方案五: 这样

《Oracle SQL疑难解析》——1.1 从表中查询数据

1.1 从表中查询数据 Oracle SQL疑难解析 1.1.1 要解决的问题 如何从一个表中查询特定行和列的数据. 1.1.2 解决方法 用包含WHERE子句的SELECT语句.下面的SELECT 语句可以从数据库表中查询符合条件的行的列值: select employee_id, first_name, last_name, hire_date, salary from hr.employees where department_id = 50 and salary < 7500; 上述SE

注解-hibernate不能删除和修改数据但是能查询,和新增询数据

问题描述 hibernate不能删除和修改数据但是能查询,和新增询数据 不能删除和修改数据:但是能查,和新增询数据.删除和修改数据也不报错.这是最郁闷的,也不知道错在哪儿.我是用的hibernate实体注解来做的. 解决方案 最终还是自己解决了,伤不起啊. 解决方案二: 问题可能出在数据的guid码上,每一次添加都会生成一个唯一的GUID码,但是你删除的时候如果是通过其他的字段删除,可能会因为某些字段不能为空(比如说GUID)导致删除失败.只能通过查找GUID来单个的删除 解决方案三: 什么意思

MySQL中基本的多表连接查询教程_Mysql

一.多表连接类型1. 笛卡尔积(交叉连接) 在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用','  如:         由于其返回的结果为被连接的两个数据表的乘积,因此当有WHERE, ON或USING条件的时候一般不建议使用,因为当数据表项目太多的时候,会非常慢.一般使用LEFT [OUTER] JOIN或者RIGHT [OUTER] JOIN  2.   内连接INNER JOIN 在MySQL中把I SELECT * FROM table1 CROSS J