SQL子查询还是不使用子查询?

4

我希望找到一个查询语句,可以从两个表中选择数据,但不将这两个表连接起来,因为我不想得到一行的结果。

假设我有以下这些表:

Persons1                 Persons2
Number Name    Surname   Number  Name   Surname
-----------------------  ------------------------- 
1      Peter   Miller    1       Frank  Farian 
2      Hans    Geige     2       Thomas Müller

当我使用以下查询时:

SELECT
  NEW.NAME,
  OLD.NAME
FROM
  PERSONS1 NEW,
  PERSONS2 OLD
WHERE
  NEW.Number = 1 AND
  OLD.Number = 1

我得到了以下结果:
Peter   Frank

我应该如何编写查询以获得以下内容:
Peter
Frank

2
你能否提供更多关于实际案例的解释?目前不是很清楚。 - Master Mind
2
除了你的示例很糟糕之外,由于使用TableName(new)和TableName(OLD)在where子句中(Old.Name=1 or new.name = 1),两个结果都应该返回,因为它们已经是表中的两行。或者在这种情况下...Name =1。但是,在你的示例中,这就是失败的开始,因为你不知道name是什么,以及name如何成为1和一个名称...你怎么知道你的示例中name是旧的还是新的?我看不到任何列可以说明这一点。 - xQbert
抱歉,我忘记了第二个表格,所以我进行了更改。现在好了吗? - Michael Müller
1
当您有一个条件NEW.NAME = 1时,如何在样本结果中获取Peter - dotnetom
1
仍然不知道它们之间的关系。name=1 没有意义。 - xQbert
显示剩余3条评论
1个回答

8
使用 UNION 来解决此问题:
SELECT NEW.NAME
FROM PERSONS1 NEW
WHERE NEW.Number = 1
UNION 
SELECT OLD.NAME
FROM PERSONS2 OLD
WHERE OLD.Number = 1

这是正确的想法,只是问题中的一个糟糕的例子使其失去了准确性。 - Mackan
同意,正确的想法示例太糟糕了,无法确认是否正确。 - xQbert
这证明了回答问题的人有多么优秀。那个问题几乎无法理解,但是 @dotnetcom 给出了正确的答案。恭喜!+1 - Nizam
谢谢!这在我的主应用程序中起作用。但是,尽管它看起来很简单,但在DatabaseWorkbench 5.0.10中却不起作用。那一定是个bug吧? - Michael Müller
@MichaelMüller 可能是这样,我没有 DatabaseWorkbench,所以无法验证。 - dotnetom
使用 UNION ALL,DBWorkbench 没有问题,出错的是另一个应用程序。 - Michael Müller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接