5

有人可以帮我更改我的 SQL 查询,这样“UNION”语句将只应用于“首字母缩略词”和“user_pk”字段(而不是“姓氏,名字;姓氏,名字”)?但在“parent”“SELECT”语句中,“acronym”、“surname”和“givename”字段应该仍然存在。

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

谢谢你的支持!

亲切的问候,嘘

4

2 回答 2

9

如果同一个字符串在 Table_1 中作为首字母缩写词出现,在 Table_2 中作为 user_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

还有更多可能的组合,但是当您指定了您想要的组合时,您将已经详细介绍了大多数情况,其他情况应该是显而易见的。


回答主要问题的评论

我只想看到一行,因为这个“user_pk”已经存在于 table_1 中(在字段“首字母缩写词”中)。在您的情况下,输出应该是: Denton Powell;鲍威尔;丹顿。table_2 中的行应该被忽略。

再解释一下,这意味着如果表项出现在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”是主键(非空且唯一),也没有指定“首字母缩写词”是主键。这些细节可能会有所帮助,并且可以消除回答您问题的人的一些担忧(即使他们没有表达过担忧)。这也让我们放心,你知道你在说什么。

于 2012-04-06T21:10:47.377 回答
-2
SELECT acronym as col, surname, givename from table_1
UNION
SELECT user_pk as col, lastname as surname, firstname as givename from table_2
于 2012-04-06T19:37:39.150 回答