小编典典

如何在单个表上执行UNION?

sql

我需要为仅居住在“彼得斯”或“乌鸦”大街上的所有客户显示姓名,姓氏和地址以及DOB。

很好,我这样做是这样的:

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

但是后来我读了一些书,上面说:

使用UNION查询产生结果。

因此,我对UNIONs进行了一些阅读,但是大多数情况下,我看到两个 SELECT 查询返回的值 必须具有相同的长度
,并且通常示例使用的是2个不同的表?

因此,我需要UNION在同一张桌子上执行一个操作,以便显示所有在地址中带有 PetersCrows 字样的客户。我试过了:

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,INTERSECT或EXCEPT运算符组合的所有查询在其目标列表中必须具有相同数量的表达式。

这是可以理解的,因为我的第一个 SELECT 仅返回3个结果(即我正在寻找的结果),而另一个返回所有已寻址的结果(包括我需要的结果)。

因此,我的确切问题是,如何UNION在同一张表(客户总共10条记录)上执行,以便显示所有地址中带有 PetersCrows
字样的客户?(其中3条记录与其他7条不匹配的条件相匹配)


阅读 244

收藏
2021-04-22

共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'+ '%'

在联合中,两个或多个查询在SELECT语句中应始终具有相同数量的字段。该WHERE子句似乎是您的联合查询中的问题。

2021-04-22