两个表上的联合,其中一个是where子句

时间:2010-04-08 18:42:53

标签: sql union union-all

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

做的:

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 个答案:

答案 0 :(得分:5)

对于你的要求,你可以这样做。

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

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

答案 1 :(得分:1)

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

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

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