Sql 在一个表中包含where子句的两个表上的并集

Sql 在一个表中包含where子句的两个表上的并集,sql,union,union-all,Sql,Union,Union All,目前我有两个表,这两个表都具有相同的结构,将在web应用程序中使用。这两个表是生产表和温度表。临时表包含一个名为[signed up]的附加列。目前,我使用每个表recno和name中的两列生成一个列表。使用这两个字段,我能够支持我的web应用程序搜索功能。现在我需要做的是支持限制第二个表上搜索中可以使用的项目数量。这样做的原因是,一旦一个人注册,就会在生产表中创建一个类似的记录,并且会有自己的recno 做: Select recno, name from production UNION

目前我有两个表,这两个表都具有相同的结构,将在web应用程序中使用。这两个表是生产表和温度表。临时表包含一个名为[signed up]的附加列。目前,我使用每个表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'

但这什么都没有回报?有人能帮忙吗?

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

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

或者你试图限制你的搜索。如果出于某种原因您确实需要一个联合,但您试图消除重复项,那么您必须修改您的语句以删除ALL子句。联合会使你得到重复的结果。如果不希望重复值,则不希望在联合中使用所有值。你可以阅读有关工会的文章。

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

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

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

我在理解你的问题时遇到了一些困难。您是真的在寻找一个联合,还是在寻找表2中但不在表1中的记录?您是否验证了临时表中确实有符合您的条件的记录?如果你选择recno,name,signup FROM temp,signup列中有什么?我想是一样的,MJB假设我理解正确。temp中注册为“Y”的任何记录也将在生产中。所以他就是不想要复制品。