SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 17.10.2009 18:35:14

letair
Участник
Зарегистрирован: 17.10.2009
Сообщений: 15

Удалить строки

Как удалить строки из одной таблицы (табл1), которые есть в другой (табл2) ? Мне нужно чтобы остались строки, отсутствующие во второй таблице

Неактивен

 

#2 17.10.2009 18:47:22

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Удалить строки

DELETE t1 FROM t1 JOIN t2 ON t1.id=t2.id;  -- понятно, что это при условии, что совпадение строк вы определяете по полю id


http://dev.mysql.com/doc/refman/5.0/en/delete.html

Неактивен

 

#3 17.10.2009 18:53:42

letair
Участник
Зарегистрирован: 17.10.2009
Сообщений: 15

Re: Удалить строки

а если мне нужно по двум полям FIO  и DR (Фамилия имя отчество и поле с датой рождения) а по ID  я чего то не понял , у них ведь значения ID разные номера ведь стоят

Неактивен

 

#4 17.10.2009 19:07:15

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Удалить строки

ON t1.FIO=t2.FIO AND t1.DR=t2.DR

http://dev.mysql.com/doc/refman/5.0/en/join.html

Неактивен

 

#5 17.10.2009 20:01:15

letair
Участник
Зарегистрирован: 17.10.2009
Сообщений: 15

Re: Удалить строки

не работает, ругается то на таблицу, то на поля

Неактивен

 

#6 17.10.2009 20:04:20

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Удалить строки

Полностью запрос и сообщение об ошибке приведите

Неактивен

 

#7 17.10.2009 20:09:50

letair
Участник
Зарегистрирован: 17.10.2009
Сообщений: 15

Re: Удалить строки

когда пишу Delete не работает, а когда пишу Select он находит все одинаковые записи и показывает их

select * from ter join gin on ter.fio=gin.fio and ter.dr=gin.dr

как все таки сделать чтобы удалилось?

Неактивен

 

#8 17.10.2009 20:12:20

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Удалить строки

delete имя_таблицы_из_которой_хотите_удалить from ter join gin on ter.fio=gin.fio and ter.dr=gin.dr;

Неактивен

 

#9 17.10.2009 20:12:36

letair
Участник
Зарегистрирован: 17.10.2009
Сообщений: 15

Re: Удалить строки

пишу так:
delete ter from ter join gin on ter.fio=gin.fio and ter.dr=gin.dr
выходит ошибка: 
Invalid use of keyword.
Token: ter
Line Number: 1

Неактивен

 

#10 17.10.2009 20:14:29

letair
Участник
Зарегистрирован: 17.10.2009
Сообщений: 15

Re: Удалить строки

vasya написал:

delete имя_таблицы_из_которой_хотите_удалить from ter join gin on ter.fio=gin.fio and ter.dr=gin.dr;

Хочу удалить из таблицы Ter

мне нужен остаток строк, которые не попали во вторую таблицу, у нас в идеале в обеих таблицах должны быть одинаковые записи, но 1 т. человек во второй таблице нет, вот и пытаюсь вытащить эту тыс. людей чтобы проверить почему они не попали во вторую таблицу

Неактивен

 

#11 17.10.2009 20:16:47

letair
Участник
Зарегистрирован: 17.10.2009
Сообщений: 15

Re: Удалить строки

или можно от противного сделать путем команды Select , типа показать в таблице ter только те записи, которые не найдены в таблице gin ничего не удаляя, можно так?

Неактивен

 

#12 17.10.2009 20:18:36

letair
Участник
Зарегистрирован: 17.10.2009
Сообщений: 15

Re: Удалить строки

сделал вот так :
select * from ter join gin on ter.fio<>gin.fio and ter.dr<>gin.dr
это будет верно?

Неактивен

 

#13 17.10.2009 20:20:09

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Удалить строки

А где вы исполняете запрос? Это ошибка не MySQL.
Ну и заодно какая версия MySQL?

Неактивен

 

#14 17.10.2009 20:21:05

letair
Участник
Зарегистрирован: 17.10.2009
Сообщений: 15

Re: Удалить строки

хм...во время выполнения этого запроса, дважды, у меня мой SQL Monitor просто исчезал оба раза ... закрывается и все....

Неактивен

 

#15 17.10.2009 20:22:14

letair
Участник
Зарегистрирован: 17.10.2009
Сообщений: 15

Re: Удалить строки

vasya написал:

А где вы исполняете запрос? Это ошибка не MySQL.
Ну и заодно какая версия MySQL?

я вообще делаю это в приложении от Дельфи в SQL Monitor

Неактивен

 

#16 17.10.2009 20:23:21

letair
Участник
Зарегистрирован: 17.10.2009
Сообщений: 15

Re: Удалить строки

поставлю MSSQL2000 тогда и попробую там

Неактивен

 

#17 17.10.2009 20:24:41

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Удалить строки

letair написал:

сделал вот так :
select * from ter join gin on ter.fio<>gin.fio and ter.dr<>gin.dr
это будет верно?

Нет.


select * from ter LEFT JOIN gin on ter.fio=gin.fio and ter.dr=gin.dr WHERE gin.fio IS NULL;

Неактивен

 

#18 17.10.2009 20:26:05

letair
Участник
Зарегистрирован: 17.10.2009
Сообщений: 15

Re: Удалить строки

а что будет означать gin.fio IS NULL

Неактивен

 

#19 17.10.2009 20:28:44

letair
Участник
Зарегистрирован: 17.10.2009
Сообщений: 15

Re: Удалить строки

vasya написал:

letair написал:

сделал вот так :
select * from ter join gin on ter.fio<>gin.fio and ter.dr<>gin.dr
это будет верно?

Нет.


select * from ter LEFT JOIN gin on ter.fio=gin.fio and ter.dr=gin.dr WHERE gin.fio IS NULL;

что то вышло .... остается проверить вручную, может быть и получилось ....
только вот из SQL Monitor нельзя вывести в Ексель, вот если бы все таки удалить... или придется в MSQL2000 выполнить запрос, там в ексель хоть можно отправить

Неактивен

 

#20 17.10.2009 20:31:29

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Удалить строки

letair написал:

поставлю MSSQL2000 тогда и попробую там

А причем здесь MSSQL2000? Речь вроде как идет о MySQL.

letair написал:

хм...во время выполнения этого запроса, дважды, у меня мой SQL Monitor просто исчезал оба раза ... закрывается и все....

Ну это уже проблемы вашего приложения от Дельфи, сказать почему так не могу.

Если не хотите пользоваться консольным клиентом, то у MySQL есть бесплатная графическая утилита MySQL GUI Tools

Неактивен

 

#21 17.10.2009 20:32:08

letair
Участник
Зарегистрирован: 17.10.2009
Сообщений: 15

Re: Удалить строки

сделал запрос без  WHERE gin.fio IS NULL и понял для чего он smile

Неактивен

 

#22 17.10.2009 20:37:26

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Удалить строки

letair написал:

а что будет означать gin.fio IS NULL

LEFT JOIN в отличии от JOIN выбирает не только те строки, которые имеют соответствие, но и те которые не имеют соответствия. Условие gin.fio IS NULL как раз оставляет в выборке только те строки, которые не имеют соответствия во второй таблице.
Выполните запрос без этого условия и поймете о чем идет речь.

Посмотрите всё-таки документацию, там подробные примеры
http://dev.mysql.com/doc/refman/5.0/en/join.html

Неактивен

 

#23 17.10.2009 20:44:37

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Удалить строки

Пока писал прошлый ответ вы уже разобрались smile

letair написал:

только вот из SQL Monitor нельзя вывести в Ексель, вот если бы все таки удалить... или придется в MSQL2000 выполнить запрос, там в ексель хоть можно отправить

SELECT ... INTO OUTFILE  спасет отца русской демократии?

А ещё проще поставить  MySQL GUI Tools.

Неактивен

 

#24 17.10.2009 20:46:59

letair
Участник
Зарегистрирован: 17.10.2009
Сообщений: 15

Re: Удалить строки

Спасибо, загрузил DBF таблички в MSQL2000 и там выбрал командой Select и выгрузил в Ексель, вроде все получилось smile

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson