0
    SELECT a.acikkapali, 
    b.onay, b.evrakno, 
    b.tarih,  
    a.kod, 
    d.ad, 
    a.note0, 
    a.sf_miktar, 
    a.sf_sf_unit, 
    a.rtalepedilentestarih, 
    c.evrakno
FROM stok47T a 
LEFT JOIN stok47e b on a.evrakno = b.evrakno
LEFT JOIN stok46t1 c on a.evrakno = c.talepno
LEFT JOIN stok00 d on a.kod = d.kod
WHERE a.tarih = '2013/04/15'

我需要以正确的方式将我的两个表添加到该脚本中,这意味着如果我映射其中一个,那么正常的行数会增加,这让我发疯,我已经尝试解决这个问题几天但我失败了很多次。我在 stok47t 和其他人之间找不到好的映射字段。但是仍然有一些列(字段)匹配它们的类型和数据。我需要听取人们的意见并学习一些东西。

这是我查询的很大一部分

4

2 回答 2

0

如果行数增加,那么很可能是由于使用了 LEFT JOIN。INNER 连接可能会有所帮助(请参阅http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html指南)

SELECT a.acikkapali, 
b.onay, b.evrakno, 
b.tarih,  
a.kod, 
d.ad, 
a.note0, 
a.sf_miktar, 
a.sf_sf_unit, 
a.rtalepedilentestarih, 
c.evrakno
FROM stok47T a 
INNER JOIN stok47e b on a.evrakno = b.evrakno
INNER JOIN stok46t1 c on a.evrakno = c.talepno
INNER JOIN stok00 d on a.kod = d.kod
WHERE a.tarih = '2013/04/15'

但是,如果不了解您的数据结构,那么您可能会丢失您所追求的信息。

于 2013-04-19T10:25:05.867 回答
0

如果您获得多行,则可能是由于连接中出现笛卡尔积。这与连接类型(左/右/全/内)无关。它基于表之间的关系。您在不同维度上有 1-N 关系。

你的条件是:

FROM stok47T a 
LEFT JOIN stok47e b on a.evrakno = b.evrakno
LEFT JOIN stok46t1 c on a.evrakno = c.talepno
LEFT JOIN stok00 d on a.kod = d.kod

我不知道这些表和字段是什么意思。但是,如果您遇到 table 中每行有一行evrakno,tablestok47t中有两行,table 中有stok47e3行的情况stok46t1,那么您将在输出中得到六行。

没有更多信息,就不可能告诉您最佳解决方案。一种方法是汇总表格。另一种是通过执行以下操作来获取第一个或最后一个相应的行:

from stok47T a left join
     (select s.*, row_number() over (partition by evrakno order by id desc) as seqnum
      from stok47e s
     ) b
     on a.evrakno = b.evrakno and b.seqnum = 1
于 2013-04-19T10:41:33.203 回答