簡體   English   中英

從一個表中獲取一列,而從另一表中獲取兩列

[英]Get one column from one table with two columns of another table

我想其中一個列的結果在一個輸出組合DepositNo ,另一個是Doc_Type其中任何Doc_Type等於DocType (反之亦然),該DepositNoDocType顯示。

這是我的查詢:

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在其目標列表中必須具有相等數量的表達式。

當您使用並集時,您應該匹配所有列,並且結果集應具有相同數量的列,因此您也需要在第一查詢中生成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)

因為投影在SELECT語句上的列數不匹配。 第一個包含一個列,其他第二個包含兩個列。 嘗試在第一個查詢中添加空值,

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

您正在尋找的是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)

您在第二張table上缺少一列。 UNION必須具有相等的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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM