2012-02-06 2 views
-1

Ok моя цель состоит в том, чтобы запросить таблицу 1 для данных, но убедитесь, что данные не были представлены путем проверки в таблице 2.Select * Где не Exists дает мне ошибки

Каждые данные имеет идентификатор, который в столбце UUID.

Select * FROM table1 Where Not Exists (SELECT * FROM table2 WHERE table2.UUID = table1.UUID);

Но я исследовал и я пытался всеми возможными способами, чтобы написать этот запрос, и я получаю:

«ERROR 1064 (42000): У вас ошибка в вашем синтаксисе SQL; проверка руководство, соответствующее вашей версии сервера MySQL, для правильного синтаксиса, используемого рядом с «WHERE NOT EXISTS» (SELECT * FROM table2 WHERE table2.UUID = table1.UUID) в строке 1 «

Любая помощь?

Также некоторые из статей, которые я нашел в Интернете, показывают, что объединение будет более эффективным, но другие утверждают, что там, где не существует, лучше. Каков более эффективный маршрут?

Благодаря

+0

Я не уверен, что вы пытаетесь выполнить. –

+0

Я пытаюсь представить новые данные каждый раз. table2 - это «уже прочитанная таблица», а table1 - база данных. Я хочу убедиться, что запись в таблице 1 не существует в таблице 2 перед представлением. – user1137403

ответ

2

я думаю, что вы должны что, как это:

SELECT UUID, ... 
FROM Table1 
WHERE UUID NOT IN 
     (SELECT UUID FROM Table2 WHERE Table2.UUID = Table1.UUID) 

это означает, что запрос выбирает все записи из table1 где UUID в таблице1 не существует в таблице2

+0

Большое спасибо !!!! – user1137403

+0

@ пользователь1137403 добро пожаловать. –

+0

+1 решение настолько очевидно после того, как вы его напечатали. Отличная работа :) – AlienWebguy

2

Попробуйте заменить table с table1:

SELECT * FROM table1 WHERE NOT EXISTS (SELECT * FROM table2 WHERE table2.UUID = table1.UUID); 
+0

Ударьте меня на кнопку ответа! +1. – ceejayoz

+0

Сэр, если я спрошу об этом? Не нужно ли иметь поле или столбец после 'WHERE'? –

+0

К сожалению, это была опечатка. У меня была таблица1, и она все еще не работает. – user1137403

0

Вы всегда можете использовать LEFT JOIN и вместо этого установите для него NULL.

SELECT a.* 
FROM table1 AS a 
LEFT JOIN table2 AS b ON a.UUID=b.UUID 
WHERE b.UUID IS NULL