2016-07-15 44 views
0

我知道如何做一个基本的内部联接查询。但是由于我的数据结构,我需要从多个表中获取值才能获得我需要的结果。截至目前,为了给我找的违法记录我要通过这个查询内部加入一列多重搜索查询

SELECT * FROM OFFENSE where TRS_IDN IN 
(SELECT TRS_IDN FROM CCH_PUBLIC.dbo.TRS where TRN_IDN IN 
(select TRN_IDN from CCH_PUBLIC.dbo.TRN where IND_IDN = 
(SELECT TOP 1 IND_IDN FROM CCH_PUBLIC.dbo.PERSON WHERE PER_IDN = @PER_IDN))) 

这导致了这个:

OFF_IDN  TRS_IDN  AGY_TXT  DOO_DTE  AON_COD  AOL_TXT     LDA_COD GOC_COD ADN_COD  ADD_TXT  ADA_DTE  REF_TXT  IPN_NBR  ICA_NBR  DMV_COD 

23808207 26154505 TX2270000 5/13/2013 54040014 DRIVING WHILE INTOXI MA    205      5/14/2013 TX227013A    1320573  

CCH_PUBLIC.dbo.TRN表中有一个名为TRN_IDN列。目标是将CCH_PUBLIC.dbo.OFFENSE表与CCH_PUBLIC.dbo.TRN内部连接并添加名为TRN_IDN的单一列。我怎样才能做到这一点

回答

1

我不知道问题是什么,但你为什么不执行下列操作以清理语法

SELECT top 1 o.* ,trs.TRN_IDN 
FROM OFFENSE o 
inner join CCH_PUBLIC.dbo.TRS trs on trs.TRS_IDN = o.TRS_IDN 
inner join CCH_PUBLIC.dbo.TRN trn on trn.TRN_IDN = trs.TRN_IDN 
inner join CCH_PUBLIC.dbo.PERSON p on p.IND_IDN = trn .IND_IDN 
where p.PER_IDN = @PER_IDN 
+0

真棒哥们这是什么excatly我一直在寻找。唯一的区别是,我可能有很多罪名进来,所以我不能选择'''TOP 1'''我把那部分代码改成'''SELECT o。*,trs.TRN_IDN'''。你提供的代码非常干净,易于理解。 – Lostaunaum

0
SELECT f1.*, f5.TRN_IDN FROM OFFENSE f1 
cross join 
(
SELECT top 1 f3.TRN_IDN FROM CCH_PUBLIC.dbo.TRS f2 inner join CCH_PUBLIC.dbo.TRN f3 on f2.TRN_IDN=f3.TRN_IDN 
inner join CCH_PUBLIC.dbo.PERSON f4 on f3.IND_IDN=f4.IND_IDN 
where f1.TRS_IDN =f2.TRS_IDN 
) f5 

如果你希望所有的链接,。减去前1

+0

嘿,朋友,我试过这段代码,但我得到一个语法错误。在WHERE子句中它说''多部分标识符f1.TRS_IDN找不到'''我之前没有做过交叉连接,所以我很难理解这段代码。 – Lostaunaum

+0

嗨,我使用交叉连接,因为我想你想要第一行建立不是所有的行(你使用In运算符,这是不一样的结果,我的英文不是很好)。 H2ORider的解决方案是正确的。但我的解决方案可以工作奇怪的... SELECT f1。*,f5.TRN_IDN FROM OFFENSE f1 交叉连接 ( SELECT top 1 f2.TRN_IDN FROM CCH_PUBLIC.dbo.TRS f2内部连接CCH_PUBLIC.dbo.TRN f3在f2上.TRN_IDN = f3.TRN_IDN 内对f3.IND_IDN = f4.IND_IDN 加入CCH_PUBLIC.dbo.PERSON F4其中f1.TRS_IDN = f2.TRS_IDN )F5 – Esperento57

0

你可以简单地用表CCH_PUBLIC.dbo.TRN加入你的SELECT语句作为您的选择主要是从表CCH_PUBLIC.dbo.OFFENSE只用where条件这样

SELECT O.*, 
     TRN.TRN_IDN 
FROM OFFENSE AS O 
JOIN CCH_PUBLIC.dbo.TRS AS TRS 
ON  O.TRS_IDN = TRS.TRS_IDN 
JOIN CCH_PUBLIC.dbo.TRN AS TRN 
ON  TRS.TRN_IDN = TRN.TRN_IDN 

WHERE O.TRS_IDN IN 
    (SELECT TRS_IDN FROM CCH_PUBLIC.dbo.TRS WHERE TRN_IDN IN 
     (SELECT TRN_IDN FROM CCH_PUBLIC.dbo.TRN WHERE IND_IDN = 
      (SELECT TOP (1) IND_IDN FROM CCH_PUBLIC.dbo.PERSON 
       WHERE PER_IDN = @PER_IDN)))