Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите плз написать SQL / 8 сообщений из 8, страница 1 из 1
02.11.2005, 18:36
    #33358605
Sashok1980
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите плз написать SQL
Привет уважаемый All !

У меня такая трабла - мне необходимо написать SQL для следующей задачи :

есть 2-е таблицы , в первой находятся записи с полем "name", а во второй некоторые записи из первой таблицы с такимже полем "name". Так вот мне необходимо выбрать все записи из первой таблицы, которых нету во второй таблице.

Сделать это желательно без вложенного SELECT.

Зарание благодарен, Alex
...
Рейтинг: 0 / 0
02.11.2005, 18:55
    #33358656
4321
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите плз написать SQL
путей много. (как и вариантов трактовки вопроса)
например
Код: plaintext
1.
SELECT * FROM "first" EXCEPT
SELECT * FROM "second"
EXCEPT Clause
The EXCEPT clause has this general form:

select_statement EXCEPT [ ALL ] select_statementselect_statement is any SELECT statement without an ORDER BY, LIMIT, or FOR UPDATE clause.

The EXCEPT operator computes the set of rows that are in the result of the left SELECT statement but not in the result of the right one.

The result of EXCEPT does not contain any duplicate rows unless the ALL option is specified. With ALL, a row that has m duplicates in the left table and n duplicates in the right table will appear max(m-n,0) times in the result set.

Multiple EXCEPT operators in the same SELECT statement are evaluated left to right, unless parentheses dictate otherwise. EXCEPT binds at the same level as UNION.

Currently, FOR UPDATE may not be specified either for an EXCEPT result or for any input of an EXCEPT.

могабыть вы имели ввиду нечто типа

Код: plaintext
1.
2.
3.
SELECT * FROM "first" 
LEFT JOIN "second" 
        USING(name)
 WHERE "second".name IS NULL
...
Рейтинг: 0 / 0
02.11.2005, 19:02
    #33358671
Sashok1980
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите плз написать SQL
спасибо за скорый ответ !

не.. чуть не то наверное..

мне надо выбрать из первой таблицы все записи которых нету во второй таблице сравнивая их например по "ID".
...
Рейтинг: 0 / 0
02.11.2005, 19:12
    #33358687
Sashok1980
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите плз написать SQL
дополнение : поля не идентичны !! а связь проходит по "ID", тоесть из первой таблицы выбрать все, что не имеют ID которые есть во второй
...
Рейтинг: 0 / 0
02.11.2005, 20:19
    #33358779
ilejn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите плз написать SQL
4321
могабыть вы имели ввиду нечто типа

Код: plaintext
1.
2.
3.
SELECT * FROM "first" 
LEFT JOIN "second" 
        USING(name)
 WHERE "second".name IS NULL


LEFT OUTER JOIN, вероятно.
...
Рейтинг: 0 / 0
03.11.2005, 07:00
    #33359025
ZemA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите плз написать SQL
ilejn 4321
могабыть вы имели ввиду нечто типа

Код: plaintext
1.
2.
3.
SELECT * FROM "first" 
LEFT JOIN "second" 
        USING(name)
 WHERE "second".name IS NULL


LEFT OUTER JOIN, вероятно.

PostgreSQL 7.4 Documentation
join_type
One of
* [ INNER ] JOIN
* LEFT [ OUTER ] JOIN
* RIGHT [ OUTER ] JOIN
* FULL [ OUTER ] JOIN
* CROSS JOIN

то что, находится в [] писать не обязательно, т.е. INNER JOIN = JOIN
...
Рейтинг: 0 / 0
03.11.2005, 09:45
    #33359236
ilejn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите плз написать SQL
то что, находится в [] писать не обязательно, т.е. INNER JOIN = JOIN

JOIN = INNER JOIN
и LEFT JOIN = LEFT OUTER JOIN.

Так что наличие или отсутствие слова OUTER в приведенном примере действительно никак не влияет на ситуацию.
...
Рейтинг: 0 / 0
03.11.2005, 10:21
    #33359338
LeXa NalBat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите плз написать SQL
4321
Код: plaintext
1.
2.
3.
SELECT * FROM "first" 
LEFT JOIN "second" 
        USING(name)
 WHERE "second".name IS NULL
Sashok1980не.. чуть не то наверное..
связь проходит по "ID"
я догадался!

Код: plaintext
1.
2.
3.
SELECT * FROM "first" 
LEFT JOIN "second" 
        USING(ID)
 WHERE "second".ID IS NULL
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите плз написать SQL / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]