mysql两表联合查询,两个表结构一样,多个字段中的3个字段,只要这3个字段有重复的就罗列出来

问题描述

a表与b表字段都是相同的,字段为:险种,车牌,发动机号,车大架号现在想实现的是:只要a表的险种与b表的险种相同,并且a表的车牌,发动机号,车大架号与b表的车牌,发动机号,车大架号只要3个中的一个相同,则显示出来相同的记录。a表创建及记录:DROP TABLE IF EXISTS `a`;CREATE TABLE `a` ( `xianzhong` varchar(30) DEFAULT NULL, `chepai` varchar(20) DEFAULT NULL, `fadongji` varchar(30) DEFAULT NULL, `chejiahao` varchar(30) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=gbk;INSERT INTO `a` VALUES ('DAA','吉B3120挂','无','');INSERT INTO `a` VALUES ('DZA','吉B3120挂','无','');INSERT INTO `a` VALUES ('DAA','暂未上牌','ABCD','无');INSERT INTO `a` VALUES ('DAA','吉B3146挂','无','');INSERT INTO `a` VALUES ('DZA','吉B3146挂','无','');b表创建及记录:DROP TABLE IF EXISTS `b`;CREATE TABLE `b` ( `xianzhong` varchar(30) DEFAULT NULL, `chepai` varchar(20) DEFAULT NULL, `fadongji` varchar(30) DEFAULT NULL, `chejiahao` varchar(30) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=gbk;INSERT INTO `b` VALUES ('DAA','吉B3120挂','无','LH9B3G40090HHT174');INSERT INTO `b` VALUES ('DZA','吉B3120挂','无','LH9B3G40090HHT174');INSERT INTO `b` VALUES ('DAA','吉B12345','','1345');INSERT INTO `b` VALUES ('DAA','吉B3146挂','无','LH9B3G40990HHT173');INSERT INTO `b` VALUES ('DZA','吉B3146挂','无','LH9B3G40990HHT173');a表及b表及想要的结果图片如下,请大家bangbang忙,实在想不到该怎么查询了,先谢谢大家了。a表b表想要的查询结果 问题补充:kidding87 写道

解决方案

SELECT a.xianzhong,CASE WHEN a.chepai IN ('暂未上牌','')THEN b.chepaiELSE a.chepaiEND AS chepai,CASE WHEN a.fadongji IN ('无','')THEN b.fadongjiELSE a.fadongjiEND AS fadongji,CASE WHEN a.chejiahao IN ('无','')THEN b.chejiahaoELSE a.chejiahaoEND AS chejiahaoFROM a,b WHERE a.xianzhong=b.xianzhong AND( (a.chepai=b.chepai AND a.chepai!='无' AND a.chepai!='') OR (a.fadongji=b.fadongji AND a.fadongji!='无' AND a.fadongji!='') OR (a.chejiahao=b.chejiahao AND a.chejiahao!='无' AND a.chejiahao!=''))上面是我的。。写的有点错了。。改下另外,select distinct b.* from a , b where a.xianzhong = b.xianzhong and( a.chepai = b.chepai or a.fadongji = b.fadongji or a.chejiahao = b.chejiahao) 这们兄弟写的。。你把a表中的任意一个fadongji改成不是无。。你就错了。。可以试下,distinct不能合并'无'字的
解决方案二:
少写了个'!'select b.* from a left join b on(a.xianzhong=b.xianzhong)where (a.chepai=b.chepai and (a.chepai!='暂未上牌' or b.chepai!='暂未上牌'))OR (a.fadongji=b.fadongji and (a.fadongji!='无' or b.fadongji!='无'))OR (a.chejiahao=b.chejiahao and (a.chejiahao!='无' or b.chejiahao!='无' )) group by b.chepai,b.fadongji,b.chejiahao,b.xianzhong
解决方案三:
没有oracle,也没有mysql ,在sqlserver下测试下,select b.* from a left join b on(a.xianzhong=b.xianzhong)where (a.chepai=b.chepai and (a.chepai!='暂未上牌' or b.chepai!='暂未上牌'))OR (a.fadongji=b.fadongji and (a.fadongji!='无' or b.fadongji!='无'))OR (a.chejiahao=b.chejiahao and (a.chejiahao='无' or b.chejiahao='无' )) group by b.chepai,b.fadongji,b.chejiahao,b.xianzhong
解决方案四:
不知道楼主是否要这样的结果,Oracle的,自己看看mysql怎么用:1将“无”当空处理:SELECT DISTINCT b.* FROM a, b WHERE b.xianzhong = a.xianzhong AND ((nvl(a.chepai, '无') = nvl(b.chepai, '无')) OR (nvl(a.fadongji, '无') = nvl(b.fadongji, '无')) OR (nvl(a.chejiahao, '无') = nvl(b.chejiahao, '无'))) 2“无”和空不一样: SELECT DISTINCT b.* FROM a, b WHERE b.xianzhong = a.xianzhong AND ((nvl(a.chepai, '') = nvl(b.chepai, '')) OR (nvl(a.fadongji, '') = nvl(b.fadongji, '')) OR (nvl(a.chejiahao, '') = nvl(b.chejiahao, '')))
解决方案五:
select distinct b.* from a, b where b.xianzhong = a.xianzhong and ( (a.chepai = b.chepai) OR (a.fadongji = b.fadongji) OR (a.chejiahao = b.chejiahao) )加个distinct去重复记录
解决方案六:
select b.* from a,b where a.xianzhong=b.xianzhong and a.chepai=b.chepai and a.chepai!='无' and a.chepai!='';union select b.* from a,b where a.xianzhong=b.xianzhong and a.fadongji=b.fadongji and a.fadongji!='无' and a.fadongji!='';unionselect b.* from a,b where a.xianzhong=b.xianzhong and a.chejiahao=b.chejiahao and a.chejiahao!='无' and a.chejiahao!='';效率不是很好,也许能实现你的功能
解决方案七:
楼上的和我写的一样的。。。看来oracle带的函数还是比较好用的。。建议什么“无” 这些都update 为null判断起来舒服多了
解决方案八:
SELECT a.xianzhong,CASE a.chepai WHEN '暂未上牌' OR ''THEN b.chepaiELSE a.chepaiEND AS chepai,CASE a.fadongji WHEN '无' OR ''THEN b.fadongjiELSE a.fadongjiEND AS fadongji,CASE a.chejiahao WHEN '无' OR ''THEN b.chejiahaoELSE a.chejiahaoEND AS chejiahaoFROM a,b WHERE a.xianzhong=b.xianzhong AND( (a.chepai=b.chepai AND a.chepai!='无' AND a.chepai!='') OR (a.fadongji=b.fadongji AND a.fadongji!='无' AND a.fadongji!='') OR (a.chejiahao=b.chejiahao AND a.chejiahao!='无' AND a.chejiahao!=''))能实现你要的功能,,但是你这个表。。没有的字段,有的是无,有的是''。这种写法太恶心了吧
解决方案九:
这个sql可以满足你需要的结果:分数拿来,哈哈!select distinct b.* from a , b where a.xianzhong = b.xianzhong and( a.chepai = b.chepai or a.fadongji = b.fadongji or a.chejiahao = b.chejiahao)
解决方案十:
select b.* from a , b where a.xianzhong = b.xianzhong and( a.chepai = b.chepai or a.fadongji = b.fadongji or a.chejiahao = b.chejiahao)
解决方案十一:
不会吧,最多没过滤字段,那你看看这个,不过我用的oracle写的,不知道mysql支持不select a.xianzhong as xianzhong, nvl(a.chepai,b.chepai) as chepai , nvl(a.fadongji,b.fadongji) as fadongji, nvl(a.chejiahao,b.chejiahao) as chejiahao from a, b where a.xianzhong = b.xianzhong and ((a.chepai = b.chepai and a.chepai != '无') or (a.fadongji = b.fadongji and a.fadongji != '无') or (a.chejiahao = b.chejiahao and a.chejiahao != '无'))
解决方案十二:
主要是你这个无字select * from a,b where a.xianzhong=b.xianzhong and ((a.chepai=b.chepai and a.chepai !='无') or (a.fadongji = b.fadongji and a.fadongji!='无') or (a.chejiahao=b.chejiahao and a.chejiahao!='无'))
解决方案十三:
哥哥,我就想问,你的结果到底要算的是什么。只要a表的险种与b表的险种相同,并且a表的车牌,发动机号,车大架号与b表的车牌,发动机号,车大架号只要3个中的一个相同,则显示出来相同的记录。不相同的咋整呢
解决方案十四:
我咋说,我做了半天也不知道你的结果怎么来的他的这个不知道你用mysql运行过结果没我没有mysql,用的oracle应该就是下面的这个意思select b.* from a left join b on a.xianzhong = b.xianzhong where (a.chepai = b.chepai) or (a.fadongji = b.fadongji) or (a.chejiahao = b.chejiahao)
解决方案十五:
这个结果是怎么得到的呢?
其他方案:
想了半天也不知道楼主要的是什么结果。。。

时间: 2024-07-30 12:45:44

mysql两表联合查询,两个表结构一样,多个字段中的3个字段,只要这3个字段有重复的就罗列出来的相关文章

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

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

mysql-PHP MYSQL 两表联合查询问题

问题描述 PHP MYSQL 两表联合查询问题 现在有两个表,第一个201411,第二个user_list, 第一个是存放用户相关的数据,第二个是存放登录用户名和密码的信息. 他们有一个共有的字段:username, 现在要如何才能调用和显示在登陆了user_list的账号(username)的201411这张表里面的其他信息. 解决方案 SELECT T2.* FROM user_list T1 INNER JOIN 201411 T2 ON T1.username = T2.username

详解Mysql多表联合查询效率分析及优化_Mysql

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

sql server-SQLSERVER 结构相同表 联合查询 分页

问题描述 SQLSERVER 结构相同表 联合查询 分页 1C 两张表:HistoryOrders.Orders结构完全一样,每天3天将Orders中的数据导入到了HistoryOrders中.数据量挺大,平均一天的数据在10W以上. 需求:根据其中某一列(例如会员ID)Group,查询统计数据(总金额....),并且是任意时间段(这里可能就会跨两个表)的数据分页查询.问题:怎样查能实现而且效率高.怎样统计总量. 解决方案 简单的做法你这里就是两个表数据查询结果的union合集后再统计考虑His

SharePoint 2013 列表多表联合查询

在SharePoint的企业应用中,遇到复杂的逻辑的时候,我们会需要多表查询:SharePoint和Sql数据表一样,也支持多表联合查询,但是不像Sql语句那样简单,需要使用SPQuery的Joins属性来完成. 下面,我们通过一个简单的例子,为大家演示一下如何使用SPQuery通过查阅项字段来进行两个列表的联合查询. 1.首先创建测试列表,City是城市,然后有一个列表叫做Address,是地址,通过查阅项Location进行关联,CityID字段是Number类型,这里代表城市的ID号: 创

sql多表联合查询二个查询实例

sql多表联合查询二个查询实例 先看常用的查询 两表结构不一样 select m.* , n.* from t1 m, t2 n where m.id = n.id and n.date = (select max(date) from t2 where id = n.id) select m.* , n.* from t1 m, t2 n where m.id = n.id and not exists (select 1 from t2 where id = n.id and date >

cakephp2.X多表联合查询join及使用分页查询的方法

本文实例讲述了cakephp2.X多表联合查询join及使用分页查询的方法.分享给大家供大家参考,具体如下: 格式化参数: public function getconditions($data){ $this->loadModel("Cm.LoginHistory"); $conditions = array(); foreach ($data as $key=>$val){ if($key=='start_date'){ $conditions['LoginHistor

link中如何跨数据库和内存表联合查询?如何同时判断列表中多个元素的存在性?

问题描述 link中如何跨数据库和内存表联合查询?如何同时判断列表中多个元素的存在性? link中如何跨数据库和内存表联合查询?如何同时判断列表中多个元素的存在性? 解决方案 直接用数组是可以的. int[] ids = { 1, 2, 3, 4, 5 }; var query = from x in db.Table where ids.Contains(x) select x;

link中内存表和数据库表联合查询怎么做?为什么提示invaild invoke?

问题描述 link中内存表和数据库表联合查询怎么做?为什么提示invaild invoke? link中内存表和数据库表联合查询怎么做?为什么提示invaild invoke? 解决方案 检查下是不是访问了null的对象?

sql-SQL 三张表联合查询中间表有空字段的问题

问题描述 SQL 三张表联合查询中间表有空字段的问题 table1(id1).table2(id2id1no).table3(noname)select t3.name from table1 t1(nolock) inner join table2 t2(nolock)on t1.id1 = t2.id1inner join table3 t3(nolock)on t2.no = t3.no第2张表里面对应的no字段有可能为空,为空的时候就取不到name而不是取no为空的name字段 解决方案