两个表上的并集,其中一个带有 where 子句

Posted

技术标签:

【中文标题】两个表上的并集,其中一个带有 where 子句【英文标题】:Union on two tables with a where clause in the one 【发布时间】:2010-04-08 18:42:52 【问题描述】:

目前我有 2 个表,这两个表具有相同的结构,并且将在 Web 应用程序中使用。这两个表是生产和临时。临时表包含一个名为 [已注册] 的附加列。目前,我使用在每个表中找到的两列(recno 和 name)生成一个列表。使用这两个字段,我可以支持我的 Web 应用程序搜索功能。现在我需要做的是支持限制可以在第二个表的搜索中使用的项目数量。这样做的原因是,一旦一个人“注册”,就会在生产表中创建一个类似的记录,并且会有自己的记录。

在做:

Select recno, name
  from production
UNION ALL
Select recno, name
  from temp

...会告诉我每个人。我试过了:

Select recno, name
  from production
UNION ALL
Select recno, name
  from temp
 WHERE signup <> 'Y'

但这什么都不返回?有人可以帮忙吗?

【问题讨论】:

我无法理解您的问题。您是真的在寻找工会,还是在寻找那些记录在表 2 中但不在表 1 中的记录? 您是否验证过temp 表中确实有符合您条件的记录?如果您SELECT recno, name, signup FROM tempsignup 列中的内容是什么? 我认为它是相同的,MJB(假设 理解正确)。 tempsignup = 'Y' 中的任何记录也将在 production 中。所以他只是不想重复。 【参考方案1】:

按照你的要求,你可以这样做。

SELECT * FROM
(
    SELECT '1' as `col`
    UNION 
    SELECT '2' as `col`
) as `someAlias`
where `someAlias`.`col` = '1'

将整个联合放在括号内,给它一个别名,然后给出条件。

【讨论】:

【参考方案2】:

不确定我是否完全理解您想要什么。如果您从临时表中注册后在生产表中创建记录,并且您只想要尚未注册的人......您根本不需要查看生产表。简单地说:

SELECT recno, name FROM temp WHERE signup='N'

或者您试图限制搜索。如果由于某种原因您确实需要联合,但您试图消除重复项,则必须修改您的语句以删除 ALL 子句。 Union ALL 会导致您获得重复项。如果你不想重复值,你不想在你的 UNION 中使用 ALL。您可以阅读 Unions here。

【讨论】:

以上是关于两个表上的并集,其中一个带有 where 子句的主要内容,如果未能解决你的问题,请参考以下文章

具有集群和分区的表上的 Bigquery SQL 性能问题

C# LINQ 与两个不同数据集上的条件 where 子句连接

两个连通图的并集的属性,如果它们的交集不连通

ON 子句具有子查询的两个表上的右外连接

在 O(mlogn) 时间内计算两个未排序数组的并集和交集

一个带有两个where子句的查询中的两个sql总和[重复]