UNION到特定领域

shu*_*hub 4 sql union

有人可以帮我改变我的SQL查询,以便"UNION"语句只应用于字段"acronym"和"user_pk"(而不是字段"surname,givename; lastname,firstname")?但是在"父""SELECT"语句中,字段"首字母缩写词","姓"和"名字"应该仍然存在.

SELECT acronym, surname, givename
FROM
(
    SELECT acronym, surname, givename from table_1
    UNION
    SELECT user_pk, lastname, firstname  from table_2
)
Run Code Online (Sandbox Code Playgroud)

感谢您的支持!

亲切的问候,shub

Jon*_*ler 8

如果同一个字符串同时显示为Table_1中的首字母缩略词和Table_2中的user_pk,那么猜测如果其中一个名称完全为空,您不希望看到它,但是如果其中任何一个名称字段都是row不是null,你宁愿看到两行而不是一行?

致力于这个假设:

SELECT t1.acronym, t1.surname, t1.givename
  FROM table_1 AS t1
 WHERE t1.surname IS NOT NULL OR t1.givename IS NOT NULL
UNION
SELECT t2.user_pk AS acronym, t2.lastname AS surname, t2.firstname AS givename
  FROM table_2 AS t2
 WHERE t2.lastname IS NOT NULL OR t2.firstname IS NOT NULL
Run Code Online (Sandbox Code Playgroud)

如果这与您想要的不够接近,请从下表中提供所需的输出:

Table_1
Acronym          Surname      Givename
Denton Powell     Powell        Denton
Jane Goodall     Goodall
Susan Mitchell                   Susan
Martin Catcall
John Thimble     Thimble          John

Table_2
User_pk        Lastname      Firstname
Denton Powell
Jane Goodall                      Jane
Susan Mitchel   Mitchell
Martin Catcall   CatCall         Marty
John Thimble      Needle         David
Run Code Online (Sandbox Code Playgroud)

有更多可能的组合,但是当你为这些组合指定了你想要的东西时,你将足够详细地涵盖大多数情况,其他的应该是显而易见的.


回答主要问题的评论

我想只看到一行,因为这个"user_pk"已经存在于table_1中(在字段"acronym"中).在你的情况下,输出应该是:Denton Powell; 鲍威尔; 丹顿.应忽略table_2中的行.

再次解释,这意味着如果条目出现在Table_1中,请使用它; 如果Table_2中没有匹配的条目,则仅使用Table_2中的条目?

再次,根据这个假设,你想要将Table_1中的数据与Table_2的半连接的补充与Table_1结合起来,这是一种花哨的方式来说'表2中的行没有在Table_1'中有一个条目:

SELECT t1.acronym, t1.surname, t1.givename
  FROM table_1 AS t1
UNION
SELECT t2.user_pk AS acronym, t2.lastname AS surname, t2.firstname AS givename
  FROM table_2 AS t2
 WHERE t2.user_pk NOT IN (SELECT t1a.acronym FROM table_1 AS t1a);
Run Code Online (Sandbox Code Playgroud)

这会失去名称中无效的条件.如果某个用户在Table_1中有一个条目,并且姓氏和给定名称字段中没有信息,那么您将看到这些空名称.如果您想要应用其他条件,则必须稍微调整一下.

顺便说一句,我认为您没有指定'user_pk'是主键(非空且唯一),也不是'首字母缩略词'是主键.这些细节可能会有所帮助,并且可以消除人们对回答您问题的担忧(即使他们没有表达担忧).它还向我们保证,你知道你在说什么.