Помогите с sql

J
На сайте с 08.06.2006
Offline
844
462

Есть две таблици table1 и table2 в них одиноковое поле name

надо из таблици table1 выбрать все значения name, которых нет в table2 и которые в в table1 повторяются более одного раза.

john2007
На сайте с 26.03.2007
Offline
173
#1

SELECT name

FROM table1

WHERE name NOT IN (SELECT distinct name FROM table2)

GROUP BY name

HAVING count(*)>1

Совершая ошибки, мы не только учимся их не повторять, но и учимся прощать такие же ошибки другим... (с)
J
На сайте с 08.06.2006
Offline
844
#2

а можно как-то проще? такой вариант сыльно базу грузит

F
На сайте с 25.07.2007
Offline
116
#3

SELECT *

FROM table1 LEFT OUTER JOIN table2 ON table1.name=table2.name

WHERE table2.name IS NULL

Apple iPod Touch (http://ipod-touch-max.ru/) - получи MAXимум!
AN
На сайте с 05.06.2004
Offline
243
#4
joost:
а можно как-то проще? такой вариант сыльно базу грузит

Вряд ли...

Попробуйте из вложенного селекта distinct убрать - возможно, будет побыстрее.

foxyrus, в вашем варианте нету "и которые в в table1 повторяются более одного раза"...

Кстати, индекс по name есть? Если нет, сделайте обязательно, поможет кардинально.

Размещу ваши баннеры на посещаемых сайтах. Места еще есть! Возможен безнал. (/ru/forum/324945) Нужны копирайтеры/рерайтеры - медики. Пишите в личку. (/ru/forum/676932)
john2007
На сайте с 26.03.2007
Offline
173
#5

А такой синтаксис возмет MySQL?

SELECT name

FROM table1

GROUP BY name

HAVING count(*)>1 and name NOT IN (SELECT name FROM table2)

или такой?

SELECT name

FROM

(SELECT distinct name

FROM table1

GROUP BY name

HAVING count(*)>1

) t

WHERE name NOT IN (SELECT name FROM table2)

И, как правильно сказали, если нет индекса по name в table2, то сделать его.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий