-1

結果を 1 つの出力に結合しようとしています。1 つの列がDepositNoあり、もう1 つの列が(その逆) に等しい場合Doc_Type、ofが表示されます。Doc_TypeDocTypeDepositNoDocType

これが私のクエリです:

SELECT Doc_Type
  FROM Doc_Outgoing_Details
 WHERE (Doc_Type <> 67)
UNION
SELECT DepositNo, DocType AS Doc_Type
  FROM Doc_Outgoing
 WHERE (DocType <> 67)

実行すると、次のように表示されます。

UNION のターゲット リストには、同じ数の式が含まれている必要があります。

4

4 に答える 4

1

ユニオンを使用する場合は、すべての列に一致する必要があり、結果セットには同じ数の列が含まれている必要があるため、最初のクエリでも Doc_Type 列を生成する必要があります。

SELECT        Doc_Type,0 as Doc_Type  // or every value 
                                      //that you didn't use in real DOCTYPE
FROM            Doc_Outgoing_Details
WHERE        (Doc_Type <> 67)
UNION
SELECT        DepositNo, DocType AS Doc_Type
FROM            Doc_Outgoing
WHERE        (DocType <> 67)
于 2013-03-10T11:38:31.973 に答える
1

ステートメントに射影された列の数がSELECT一致しないためです。最初の列には 1 つの列が含まれ、もう 1 つの列には 2 つの列が含まれています。最初のクエリに null 値を追加してみてください。

SELECT    Doc_Type as DepositNo, NULL Doc_Type
FROM      Doc_Outgoing_Details
WHERE     Doc_Type <> 67
UNION
SELECT    DepositNo, DocType AS Doc_Type
FROM      Doc_Outgoing
WHERE     DocType <> 67
于 2013-03-10T11:38:50.933 に答える
1

あなたが探しているのは ですINNER JOIN

SELECT d.DepositNo, D.Doctype
FROM Doc_Outgoing d
INNER JOIN Doc_Outgoing_Details do
    ON d.Doctype = do.Doc_type
WHERE (d.DocType <> 67)
于 2013-03-10T11:39:56.837 に答える
1

2番目の列がありませんtableUNIONの数が等しい必要がありcolumnsます。これはうまくいくはずです。

SELECT        O AS DepoSitNo, Doc_Type
FROM            Doc_Outgoing_Details
WHERE        (Doc_Type <> 67)
UNION
SELECT        DepositNo, DocType AS Doc_Type
FROM            Doc_Outgoing
WHERE        (DocType <> 67)
于 2013-03-10T11:41:25.683 に答える