Union Select Distinct语法?

时间:2013-01-10 19:16:54

标签: tsql

我有一张巨大的表格,其中包含送货地址信息和帐单邮寄地址信息。我可以在两个单独的表格中获得唯一的送货地址和帐单邮寄地址:

SELECT DISTINCT ShipToName, ShipToAddress1, ShipToAddress2, ShipToAddress3, ShipToCity, ShipToZipCode
FROM Orders
ORDER BY Orders.ShipToName

SELECT DISTINCT BillToName, BillToAddress1, BillToAddress2, BillToAddress3, BillToCity, BillToZipCode
FROM Orders
ORDER BY Orders.BillToName

如何获得两者的明显交集?我不确定语法。

3 个答案:

答案 0 :(得分:2)

这样的事情?

SELECT DISTINCT
    toname, addr1,  addr2,  addr3,  city,   zip
FROM
    (SELECT DISTINCT 
        ShipToName AS toName, 
        ShipToAddress1 AS addr1, 
        ShipToAddress2 AS addr2, 
        ShipToAddress3 AS addr3, 
        ShipToCity AS city, 
        ShipToZipCode AS zip
    FROM 
        Orders

    UNION ALL

    SELECT DISTINCT 
    BillToName AS toName, 
    BillToAddress1 AS addr1, 
    BillToAddress2 AS addr2, 
    BillToAddress3 AS addr3, 
    BillToCity AS city, 
    BillToZipCode AS zip
    FROM 
        Orders) o
ORDER BY ToName

答案 1 :(得分:2)

你说“交集”但是你接受了联盟答案,所以我猜你只想要UNION DISTINCT。不需要派生表和三个DISTINCT。你可以使用简单的:

SELECT 
    ShipToName     AS Name, 
    ShipToAddress1 AS Address1, 
    ShipToAddress2 AS Address2, 
    ShipToAddress3 AS Address3, 
    ShipToCity     AS City, 
    ShipToZipCode  AS ZipCode
FROM 
    Orders

UNION                               --- UNION means UNION DISTINCT

SELECT  
    BillToName 
    BillToAddress1, 
    BillToAddress2,
    BillToAddress3,
    BillToCity,
    BillToZipCode
FROM 
    Orders 

ORDER BY
    Name ;

答案 2 :(得分:1)

您可以在所有字段上加入两个集合,这将返回匹配的记录:

SELECT *
FROM Orders o1
INNER JOIN Orders o2
    ON o1.ShipToName = o2.BillToName
    AND o1.ShipToAddress1 = o2.BillToAddress1
    AND o1.ShipToAddress2 = o2.BillToAddress2
    AND o1.ShipToAddress3 = o2.BillToAddress3 
    AND o1.ShipToCity = o2.BillToCity
    AND o1.ShipToZipCode = o2.BillToZipCode

或者您应该可以使用INTERSECT:

SELECT ShipToName, ShipToAddress1, ShipToAddress2, ShipToAddress3, ShipToCity, ShipToZipCode
FROM Orders
INTERSECT
SELECT BillToName, BillToAddress1, BillToAddress2, BillToAddress3, BillToCity, BillToZipCode
FROM Orders

<击>

甚至UNION查询(UNION删除两组数据之间的重复项):

SELECT ShipToName, ShipToAddress1, ShipToAddress2, ShipToAddress3, ShipToCity, ShipToZipCode
FROM Orders
UNION 
SELECT BillToName, BillToAddress1, BillToAddress2, BillToAddress3, BillToCity, BillToZipCode
FROM Orders