2010-04-08 1 views
2

В настоящее время у меня есть 2 таблицы, обе таблицы имеют одинаковую структуру и будут использоваться в веб-приложении. две таблицы - это производство и темп. Таблица temp содержит один дополнительный столбец с именем [signed up]. В настоящее время я создаю один список, используя два столбца, которые находятся в каждой таблице (имя и имя). Используя эти два поля, я могу поддерживать функцию поиска веб-приложений. Теперь мне нужно будет ограничить количество элементов, которые можно использовать в поиске во второй таблице. причина этого заключается в том, что когда человек «подписывается», подобная запись создается в производственной таблице и будет иметь свой собственный 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

+1

Вы подтвердили, что на самом деле записи в таблице temp соответствуют вашим критериям? Если вы 'SELECT recno, имя, регистрация FROM temp', что находится в столбце' signup'? – Aaronaught

+0

Я думаю, что это то же самое, MJB (предполагая, что я правильно понимаю). Любая запись в 'temp' с' signup = 'Y'' также будет находиться в 'production'. Поэтому он просто не хочет дубликатов. –

ответ

1

Не уверен, что я точно понимаю, чего вы хотите. Если вы создаете записи в производственной таблице, как только они подписались из таблицы temp, и вам нужны только люди, которые не подписались ... вам вообще не нужно искать в рабочей таблице. Просто:

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

Или, тем не менее, вы пытаетесь ограничить ваш поиск. Если по какой-то причине вам нужен союз, но вы пытаетесь устранить дубликаты, вам придется изменить свой оператор, чтобы удалить предложение ALL. Союз ALL заставляет вас получать дубликаты. Если вы не хотите дублировать значения, вы не хотите использовать ВСЕ в своем UNION. Вы можете читать на Unions here.

5

Для чего вы спрашиваете, вы можете сделать это в этом стиле.

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

Поместите весь союз внутри скобок, дайте ему псевдоним, затем дайте условие.