CREATE TABLE [dbo].[Tst_Company](
[ID] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
[Name] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
[Status] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]GO
CREATE TABLE [dbo].[Tst_Employee](
[ID] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
[CompanyID] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
[Name] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
[Status] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
INSERT INTO Tst_Company ([ID], [Name], [Status]) VALUES (N'1 ', N'163 ', N'0 ')
INSERT INTO Tst_Company ([ID], [Name], [Status]) VALUES (N'2 ', N'Sina ', N'1 ')
INSERT INTO Tst_Company ([ID], [Name], [Status]) VALUES (N'3 ', N'PConline ', N'1 ')
INSERT INTO Tst_Company ([ID], [Name], [Status]) VALUES (N'4 ', N'Taobao ', N'0 ')
INSERT INTO Tst_Employee ([ID], [CompanyID], [Name], [Status]) VALUES (N'1 ', N'1 ', N'小陈 ', N'1 ')
INSERT INTO Tst_Employee ([ID], [CompanyID], [Name], [Status]) VALUES (N'2 ', N'1 ', N'小王 ', N'1 ')
INSERT INTO Tst_Employee ([ID], [CompanyID], [Name], [Status]) VALUES (N'3 ', N'4 ', N'小张 ', N'0 ')
INSERT INTO Tst_Employee ([ID], [CompanyID], [Name], [Status]) VALUES (N'4 ', N'3 ', N'小李 ', N'1 ')
INSERT INTO Tst_Employee ([ID], [CompanyID], [Name], [Status]) VALUES (N'5 ', N'4 ', N'小白 ', N'0 ')
INSERT INTO Tst_Employee ([ID], [CompanyID], [Name], [Status]) VALUES (N'6 ', N'2 ', N'小黑 ', N'1 ')
INSERT INTO Tst_Employee ([ID], [CompanyID], [Name], [Status]) VALUES (N'7 ', N'3 ', N'小红 ', N'1 ')
GO
select * from tst_employee a left join tst_company b on a.companyid = b.id and b.status = 0以上脚本生成的查询结果为:
1 1 小陈 1 1 163 0
2 1 小王 1 1 163 0
3 4 小张 0 4 Taobao 0
4 3 小李 1 NULL NULL NULL
5 4 小白 0 4 Taobao 0
6 2 小黑 1 NULL NULL NULL
7 3 小红 1 NULL NULL NULL
-----------------------------------------------------
但是因为我现在是用NHibernate自动生成SQL的,而NHibernate在关联的时候没有办法给On再添加AND条件
那我的查询
select * from tst_employee a left join tst_company b on a.companyid = b.id where ??
能实现和我上面一样的查询结果呢?
谢谢
解决方案 »
- 将一个表中有一列为fatherID,我想把fatherID相同的数据作为一个临时表输出。输出过个表。
- 求助,关于sql server 2000 的安装问题(在线 等)
- 语句执行到一般连接中断 急啊 谢谢各位大虾了
- 100分,高手帮优化一下SQL语句..急急...
- 无法删除用户!!!急!!在线等!!!高手帮忙解决一下
- start with函数在SQL2005中如何对应?
- 安装SQL出现问题,一直没有解决,也是前从未遇到过的(安装时提示:以前某个程序安装已经安装计算机挂起文件,请重新起动)
- 向高手请教一句SQL语句!!!
- 在SQL中如何实现精确查询!(区分大小写)
- FUNLOVE 病毒
- 问一个关于SQLITE语句的问题
- 如何保证Agent Job运行完成之后再执行后面的SQL代码
from tst_employee a left join (select * from tst_company where status = 0) b on a.companyid = b.id
有可能是不一样的
*
from
tst_employee a
left join
(select * from tst_company where status = 0) b
on
a.companyid = b.id
select * from tst_employee a left join tst_company b on a.companyid = b.id where ??
用这种格式 绝对实现不了
where isnull(b.status,0)=0
left join (select * from tst_company where status = 0) b
on
a.companyid = b.id
--------
这种不行因为NHibernate没有办法自动生成这样的格式
where isnull(b.status,0)=0
这些都不行。。
谢谢
这里有说用with条件,但我不知道什么意思
CREATE VIEW v_tst_company AS
SELECT * FROM tst_company
WHERE STATUS=0然后:
select * from tst_employee a left join v_tst_company b on a.companyid = b.id
这样就和你要的一模一样了。否则,单纯改where不改select *是不可能实现你要的那样的。
-----------------
视图不行啊。。因为我的AND条件是不定的。。我没有办法做视图
谢谢
case when b.status <>0 then null else b.ID end ,
case when b.status <>0 then null else b.Name end ,
case when b.status <>0 then null else b.Status end
from tst_employee a left join tst_company b on a.companyid = b.id
hibernate 的 HQL 写法不是很灵活,有很多和SQL的语法不同,建议你重新建个实体,然后用JDBC来处理,返回list就行。