有人可以帮助我更改SQL查询,以便“UNION”语句仅应用于字段“acronym”和“user_pk”(而不应用于字段“surname,givename; lastname,firstname”)吗?但是在“父”“选择”语句中,“缩写”,“姓”和“给定名称”字段仍应存在。

SELECT acronym, surname, givename
FROM
(
    SELECT acronym, surname, givename from table_1
    UNION
    SELECT user_pk, lastname, firstname  from table_2
)

谢谢你的支持!

亲切的问候

最佳答案

如果相同的字符串在表_1和表_2中同时作为首字母缩写词和用户_pk出现,那么可以猜测,如果其中一个名称完全为空,则您不想看到它,但是如果其中一个名称字段中的任何一个row不为空,您宁愿看到两行而不是一行?

根据该假设进行工作:

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

如果距离所需的距离还不够,请从下表中提供所需的输出:
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

还有更多可能的组合,但是当您为这些情况指定了所需的内容时,您将充分详细地介绍大多数情况,以使其他情况显而易见。

对主要问题的回答



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

同样,根据该假设进行操作,然后您希望将Table_1中的数据与“Table_2与Table_1的半联接的补码”的并集,这是一种花哨的方式,说“Table_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);

这就失去了名称中空性的条件。如果某些用户在Table_1中有一个条目,但在“姓氏”和“给定名称”字段中没有任何信息,那么您将看到这些空名称。如果要应用其他条件,则必须稍作调整。

顺便说一句,我认为您从未指定过'user_pk'是主键(非null和唯一),也不是'acronym'是主键。这些详细信息可能会有所帮助,并且可以消除某些人回答您的问题的后顾之忧(即使他们没有表达过担忧)。这也使我们确信您知道您在说什么。

10-07 13:59