2010-04-08 37 views
2

目前我有兩個表,兩個表具有相同的結構並將用於Web應用程序。兩個表是生產和臨時。臨時表包含一個名爲[註冊]的附加列。目前,我使用每個表中找到的兩列(recno和name)生成單個列表。使用這兩個字段,我可以支持我的Web應用程序搜索功能。現在我需要做的是支持限制可以在第二個表上進行搜索的項目數量。原因是一旦一個人「註冊」,在生產表中創建一個類似的記錄並且將具有其自己的recno。在兩個表中使用where子句中的一個聯合使用

做:

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' 

但是這不會返回什麼?誰能幫忙?

+0

我在理解您的問題時遇到了一些麻煩。你真的在尋找一個工會嗎?或者你在尋找那些創紀錄的表2,但不是在表1中? – MJB 2010-04-08 18:51:25

+1

您是否驗證過符合條件的'temp'表中是否有實際記錄?如果你'選擇recno,名字,註冊FROM temp','註冊'列中有什麼? – Aaronaught 2010-04-08 18:52:20

+0

我認爲這是相同的,MJB(假設*我*正確理解)。 'temp'中任何'signup ='Y''的記錄也將在'production'中。所以他只是不想重複。 – 2010-04-08 18:52:51

回答

1

不知道我是否理解你想要的東西。如果您在生產表中創建了記錄,並且您只需要尚未註冊的人員,則根本無需查看生產表。只需:

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

或者您嘗試限制您的搜索。如果由於某種原因,你確實需要一個聯合,但你試圖消除重複,你必須修改你的語句來刪除ALL子句。 ALL ALL會導致您重複。如果你不想重複值,你不想在你的UNION中使用ALL。你可以閱讀聯盟here

5

對於你所要求的,你可以做到這一點。

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

把整個工會放在括號內,給它一個別名,然後給出條件。

相關問題