首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Mysql >

关于联合查询的有关问题

2012-02-04 
关于联合查询的问题假设表1为CREATETABLE`airways`(`objID`int(11)NOTNULLAUTO_INCREMENT,`code`char(2)NO

关于联合查询的问题
假设表1为  
CREATE   TABLE   `airways`   (
    `objID`   int(11)   NOT   NULL   AUTO_INCREMENT,
    `code`   char(2)   NOT   NULL,
    `phone`   varchar(50)   NOT   NULL,
    `ticketType`   int(1)   NOT   NULL   DEFAULT   '0 ',
    `actived`   tinyint(1)   NOT   NULL,
    `lastModified`   timestamp   NOT   NULL   DEFAULT   CURRENT_TIMESTAMP   ON   UPDATE   CURRENT_TIMESTAMP,
    PRIMARY   KEY   (`objID`),
    UNIQUE   KEY   `code`   (`code`)
)   ENGINE=InnoDB   AUTO_INCREMENT=2   DEFAULT   CHARSET=utf8   COMMENT= '机型信息 '

表2为
CREATE   TABLE   `airwaysmult`   (
    `objID`   int(11)   NOT   NULL   AUTO_INCREMENT,
    `langID`   varchar(100)   NOT   NULL,
    `belongToID`   int(11)   NOT   NULL,
    `airwaysname`   varchar(255)   DEFAULT   ' ',
    `abbreviation`   varchar(50)   DEFAULT   ' ',
    PRIMARY   KEY   (`objID`),
    KEY   `belongToID`   (`belongToID`)
)   ENGINE=InnoDB   AUTO_INCREMENT=3   DEFAULT   CHARSET=utf8   COMMENT= '航空公司多语言信息 '
 

联合查询语句如下
select   a.*,am.airwaysname   from   `airways`   a   left   join   `airwaysmult`   am   on   a.objID   =   belongToID   where   am.langID= 'zh '

这个当airways对应的airwaysmult表中只有EN而没有ZH的时候将得不到airways的数据

有没有办法当airwaysmult中不存在langID数据也可以得倒对应的airways中的数据,am.airwaysname数据补null


在线等======

[解决办法]
select a.*,am.airwaysname from `airways` a right join `airwaysmult` am on a.objID = belongToID where am.langID= 'zh '
或者先查airwaysmult

select ......from airwaysmult left join airways...........
[解决办法]

有没有办法当airwaysmult中不存在langID数据也可以得倒对应的airways中的数据,am.airwaysname数据补null

好好看一下SQL语法吧。关于没有数据补充为NULL的,这个是外连接的基本特征。

select a.*,am.airwaysname from `airways` a right join `airwaysmult` am on a.objID = belongToID where am.langID= 'zh '

那个数据补充为NULL的在RIGHT JOIN 的左边,对应的在LEFT JOIN 的右边。

如果两边都想补充为NULL的话,看看FULL OUTER JION
[解决办法]
不是已经给你答案了嘛?

热点排行