如何做一个UNION在一个表?(How to do a UNION on a single tabl

2019-09-21 09:01发布

我需要为谁住在“彼得”或“乌鸦”唯一途径所有客户显示姓名和地址和出生日期。

这很好,我做到了,像这样:

SELECT Customers.FirstName, Customers.Surname,
       Customers.CustomerAddress, Customers.DOB
FROM Customers
WHERE 
(  Customers.CustomerAddress LIKE '%'+ 'Peters' + '%' 
or Customers.CustomerAddress LIKE '%'+ 'Crows'+ '%')

但后来我看了有点困难,它说:

使用UNION查询产生的结果。

所以,我读了对位的UNION S,但主要是我看到来自SELECT查询返回的值必须是相同的长度 ,通常例子是使用2个不同的表?

所以,我需要执行UNION与他们的地址的话彼得斯乌鸦显示在同一个表这样所有的客户。 我试过了:

SELECT Customers.CustomerAddress
FROM Customers
WHERE 
(  Customers.CustomerAddress LIKE '%'+ 'Peters' + '%'
or Customers.CustomerAddress LIKE '%'+ 'Crows'+ '%')
UNION
SELECT Customers.FirstName, Customers.Surname,
       Customers.CustomerAddress, Customers.DOB
FROM Customers

但我得到的错误:

所有查询使用UNION合并,交叉或EXCEPT运算符必须在其目标列表中的相同数目的表达式。

这是可以理解的,因为我的第一只选择返回3个结果(即结果我正在寻找),而其他的回报所有编址(包括我需要的)。

所以我确切的问题是,我该怎么做我执行UNION在同一个表(客户总数的10条记录),这样所有的客户的话彼得斯乌鸦他们的地址显示? (的记录3匹配条件的其它7不要)

Answer 1:

 SELECT Customers.FirstName, Customers.Surname, Customers.DOB, Customers.CustomerAddress FROM Customers WHERE Customers.CustomerAddress LIKE '%'+ 'Main' + '%' UNION SELECT Customers.FirstName, Customers.Surname, Customers.DOB, Customers.CustomerAddress FROM Customers WHERE Customers.CustomerAddress LIKE '%'+ 'Gladys'+ '%' 

在联盟的2次或更多的查询应该总是在田里相同数量的SELECT语句。 WHERE子句似乎是在联合查询的问题



Answer 2:

同时需要返回台具有相同的格式,如果你希望能够合并两套。 第一组只返回一个客户的地址,例如:

123 Main St

但是从第二查询返回的集中返回三列:姓氏,名字,出生日期。 例如:

John, Doe, 1970-12-31

因此,获得两个查询返回相同的列集合,使他们可以合并。 例如,包括所有4列:

Jane, Smith, 1975-11-22, 123 Main St

John, Doe, 1970-12-31,  89 Elm St

在相同的列数,以相同的顺序,与同类型的,那么,这两组可以使用UNION合并。

Jane, Smith, 1975-11-22, 123 Main St
John, Doe, 1970-12-31,  89 Elm St

此外,一定要阅读并UNION和UNION ALL区分。



文章来源: How to do a UNION on a single table?