用左连接完成对一个表中的多个外键字段替换查询返回名称
2011-04-18 23:12
387 查看
---------- 创建4个表结构,其中jobs表中的三个字段cityID、provinceID、countryID对应着其他3个表的主键
CREATE TABLE [dbo].[city] (
[ID] [smallint] IDENTITY (1, 1) NOT NULL ,
[cityName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[country] (
[ID] [smallint] IDENTITY (1, 1) NOT NULL ,
[countryName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[jobs] (
[job_id] [smallint] IDENTITY (1, 1) NOT NULL ,
[userName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[cityID] [int] NULL ,
[provinceID] [int] NULL ,
[countryID] [int] NULL ,
[productName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[province] (
[ID] [smallint] IDENTITY (1, 1) NOT NULL ,
[provinceName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
----查询jobs表中的三个外键对应的名称
---t1 get countryName
select job_id, userName, provinceID,countryName,ProductName
from jobs as t1 left join country t2 on t2.id = t1.countryID
-- get countryName and provinceName
select job_id, userName, provinceName,countryName,ProductName
from (
select job_id, userName, provinceID,countryName,ProductName
from jobs as t1 left join country t2 on t2.id = t1.countryID
) as t3 left join Province t4 on t3.provinceID = t4.ID
-- get all
select job_id, userName, cityName, provinceName,countryName,ProductName
from(
select job_id, userName,cityID, provinceName,countryName,ProductName
from (
select job_id, userName,cityID, provinceID,countryName,ProductName
from jobs as t1 left join country t2 on t2.id = t1.countryID
) as t3 left join Province t4 on t3.provinceID = t4.ID
) as t5 left join city t6 on t5.cityID = t6.ID
CREATE TABLE [dbo].[city] (
[ID] [smallint] IDENTITY (1, 1) NOT NULL ,
[cityName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[country] (
[ID] [smallint] IDENTITY (1, 1) NOT NULL ,
[countryName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[jobs] (
[job_id] [smallint] IDENTITY (1, 1) NOT NULL ,
[userName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[cityID] [int] NULL ,
[provinceID] [int] NULL ,
[countryID] [int] NULL ,
[productName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[province] (
[ID] [smallint] IDENTITY (1, 1) NOT NULL ,
[provinceName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
----查询jobs表中的三个外键对应的名称
---t1 get countryName
select job_id, userName, provinceID,countryName,ProductName
from jobs as t1 left join country t2 on t2.id = t1.countryID
-- get countryName and provinceName
select job_id, userName, provinceName,countryName,ProductName
from (
select job_id, userName, provinceID,countryName,ProductName
from jobs as t1 left join country t2 on t2.id = t1.countryID
) as t3 left join Province t4 on t3.provinceID = t4.ID
-- get all
select job_id, userName, cityName, provinceName,countryName,ProductName
from(
select job_id, userName,cityID, provinceName,countryName,ProductName
from (
select job_id, userName,cityID, provinceID,countryName,ProductName
from jobs as t1 left join country t2 on t2.id = t1.countryID
) as t3 left join Province t4 on t3.provinceID = t4.ID
) as t5 left join city t6 on t5.cityID = t6.ID
相关文章推荐
- 在使用Hibernate时,因为一个查询需要更多的表连接而要使用SQL来解决性能问题。然而返回的结果集中包含了没有映射的Entity类中的表字段,在这个SQL中还有使用如何将层次关系的父子结点显示为横行
- 在SQL语句中查询多条记录并把多条记录同一字段的值连接成一个字符并返回的写法
- 一个用Regex的完成sql语句中字段替换的demo
- 有一个数据表,但是我只知道一个字段的名称。现在我想查询数据库里面的除去这个字段的所有数据!
- mysql 查询一个字段,生成连接字符串输出 统计函数 group_concat concat concat_ws
- 多字段模糊查询,前一个字段无搜索结果返回null时不影响后一个字段模糊查询
- SQL 把多个字段连接成一个字符串、替换字符串字段中的某些字符串
- all与any操作符和返回两个结果集和把一个结果集当表和查询结果创建表和同时更新几个字段
- hibernate查询数据表char类型字段只返回一个字符
- hibernate查询数据表char类型字段只返回一个字符
- hibernate查询数据库char类型字段时只返回一个字符
- 根据一个表中的字段属性名称作为查询条件来批量修改该表中数据
- JAVA连接MYSQL通过查询返回的结果集获取表结构字段类型
- 数据库优化union连表查询返回同一个字段
- hibernate查询数据表char类型字段只返回一个字符
- hibernate查询数据表char类型字段只返回一个字符
- hibernate查询数据表char类型字段只返回一个字符
- MyBatis查询两个字段,返回Map,一个字段作为key,一个字段作为value的实现
- hibernate查询数据表char类型字段只返回一个字符
- 把从数据库中查询出的一个字段封装到一个List中,返回List