2

我正在尝试迁移一些遗留程序代码。我无法找出 ANSI 标准语法来产生相同的结果。

以下是我尝试过的众多组合之一。第二个连接的内表是什么,是第一个连接的输出还是源表。

请帮助我有很多代码要更改。

原始 SQL 语句

select * from  
JT1 a, JT2 b, JT3 c  
where a.ID *= b.ID   
  and c.JOB *= b.JOB  

我的转换

select *   
from JT1 a  
 left outer join JT2 b   
 on a.ID = b.ID  
 right outer join JT3 c  
 on c.JOB = b.JOB  

下面是 SQL 表定义和示例数据。

Create table JT1 (  
 ID   int(4)   not null,  
 NAME char(20) not null)  


Create table JT2 ( 
  ID  int(4)   not null, 
  JOB char(20) not null)  


Create table JT3 ( 
  JOB  char(20) not null, 
  DUTY char(20) not null)  

INSERT INTO dbo.JT1 VALUES(10, "Saunders")  
INSERT INTO dbo.JT1 VALUES(20, "Pernal")  
INSERT INTO dbo.JT1 VALUES(30, "Marenghi")  
INSERT INTO dbo.JT2 VALUES(20, "Sales")  
INSERT INTO dbo.JT2 VALUES(30, "Clerk")   
INSERT INTO dbo.JT2 VALUES(30, "Mgr")  
INSERT INTO dbo.JT2 VALUES(40, "Sales")  
INSERT INTO dbo.JT2 VALUES(50, "Mgr")  
INSERT INTO dbo.JT3 VALUES("Mgr","Evaluate")  
INSERT INTO dbo.JT3 VALUES("Mgr","Reports")  
INSERT INTO dbo.JT3 VALUES("Mgr","Meeting")  
INSERT INTO dbo.JT3 VALUES("Clerk","Stocking")  
INSERT INTO dbo.JT3 VALUES("Clerk","Customer Request")  
4

4 回答 4

3

好的,我花了一段时间,但试试这个:

select   a.ID,  a.NAME, b.ID,   b.JOB,  a.JOB,  a.DUTY    
from (Select * from #jt1    
      cross join #jt3  ) a 
left outer join #jt2 b    
  on a.ID = b.ID    and a.job = b.job

多次使用左连接运算符的问题在于,您确实有一个隐藏的交叉连接。这应该会得到正确的结果,至于结果是否一直不正确是由于开发人员不了解他们在做什么,只有你自己知道。

于 2012-08-29T21:59:06.647 回答
2

原始查询等效于:

select * 
from JT1 a
left join JT2 b on a.ID = b.ID
left join JT3 c on c.JOB = b.JOB
于 2012-08-29T21:21:59.613 回答
1

*=相当于left [outer] join

=*相当于right [outer] join

于 2012-08-29T21:26:39.467 回答
0

如何创建查询...

示例表:交易

输入日期 PartyIdno 类别 贷记/借记金额
------ ---------- ---------- --------- ------------ --- -----
     1 02-01-2016 1 收据 C 8,200
     1 02-01-2016 5 付款 D 8,200
     2 14-02-2016 1 销售额 D 11,200
     2 14-02-2016 4 销售额 C 6,500
     2 14-02-2016 2 销售额 C 4,700

输出
------

输入日期 PartyIdno 借方 贷方 余额
----- ------ ---------- ------ -------- -----------                   
                             SubId 子金额
                             ----- ---------
  1 02-01-2016 1 8,200 8,200 铬
      02-01-2016 5 8,200 博士
  2 14-02-2016 1 11,200 3,000 博士
      14-02-2016 4 6,500 铬
      14-02-2016 2 4,700 铬

SQL 语句:

GLOBALSSS.Open_DB_Connection()

Dim cmd As New Sql Command("Select T1.ENTRY,COALESCE(T1.PARTYIDNO,T2.PARTYIDNO) AS Color FROM TRANSACT T1 FULL OUTER JOIN (SELECT PARTYIDNO FROM TRANSACT WHERE ENTRY=1) T2 ON 1 = 0 WHERE T1.PARTYIDNO =1 或 T2.PARTYIDNO-1 ",连接)

Dim da 作为新的 SqlDataAdapter(cmd)

将 dt 调暗为新数据表

da.填充(dt)

DataGridView1.DataSource = dt

GLOBALSSS.Close_DB_Connection()
于 2017-03-29T07:47:02.403 回答