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'

そのスクリプトに 2 つのテーブルを正しい方法で追加する必要があります。つまり、そのうちの 1 つをマップした場合、通常の行数が増えると気が狂います。その問題を数日間解決しようとしましたが、多くの失敗がありました。回。stok47t と他のフィールドの間で適切にマップされたフィールドが見つかりませんでした。ただし、そのタイプとデータに一致する列 (フィールド) がまだいくつかあります。私は人々の意見を聞き、何かを学ぶ必要があります。

これが私のクエリの大部分です

4

2 に答える 2

0

行数が増えている場合は、LEFT JOIN の使用が原因である可能性があります。内部結合が役立つ場合があります ( 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

これらのテーブルとフィールドの意味がわかりません。ただし、evraknotable ごとに1 つの行stok47tがあり、 table に 2 つの行と tablestok47eに 3stok46t1つの行がある場合、出力には 6 つの行が表示されます。

これ以上の情報がなければ、最適なソリューションを説明することはできません。1 つの方法は、表を要約することです。もう 1 つは、次のようにして、対応する最初または最後の行を取得することです。

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 に答える