RE: sql delete question

2003-01-10 Thread Veysel Harun Sahin
Hello Adolfo,

Yes I have tried it too but it did not work. Anyway i have done it programatically in 
my app.

Thanks.

Adolfo Bello [EMAIL PROTECTED] wrote:

 I have two tables whose structures are below.

 - Table1 -
 table1id int not null auto_increment
 data varchar(30)

 - Table2 -
 table2id int not null auto_increment
 table1id int not null
 data varchar(30)


 These two tables are connected to each other with the
 table1id column. I need to delete rows in table1 which have
 no corresponding table1id values in table2 and also i need
 to delete rows in table2 which have no corresponding
 table1id values in table1. Any comments?

Can you try a multi table DELETE? I haven't done it but I would be a shot at
something like
(adapted from MySQL Manual)
DELETE t1 FROM t1,t2 WHERE t1.id=t2.id AND t2.id IS NULL

Adolfo


-
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/           (the list archive)

To request this thread, e-mail [EMAIL PROTECTED]
To unsubscribe, e-mail [EMAIL PROTECTED]
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php



__
The NEW Netscape 7.0 browser is now available. Upgrade now! 
http://channels.netscape.com/ns/browsers/download.jsp 

Get your own FREE, personal Netscape Mail account today at http://webmail.netscape.com/

-
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/   (the list archive)

To request this thread, e-mail [EMAIL PROTECTED]
To unsubscribe, e-mail [EMAIL PROTECTED]
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php




Re: sql delete question

2003-01-08 Thread Paul DuBois
At 7:27 -0500 1/8/03, Veysel Harun Sahin wrote:

Hello,

I have two tables whose structures are below.

- Table1 -
table1id int not null auto_increment
data varchar(30)

- Table2 -
table2id int not null auto_increment
table1id int not null
data varchar(30)


These two tables are connected to each other with the table1id 
column. I need to delete rows in table1 which have no corresponding 
table1id values in table2 and also i need to delete rows in table2 
which have no corresponding table1id values in table1. Any 
comments?

Thanks.

sql,query


This sounds like a delete parentless children and childless parents
question.  Turning to my handy copy of MySQL Cookbook which I just happen
to have nearby :-) I see the following under Identifying and Removing
Unattached Records (pp668-669), where the _head and _item are the parent
and child tables that correspond to your table1 and table2:

---
To  use  a  multiple-table  DELETE  statement  for  removing
unmatched records, just take the SELECT statement  that  you
use  to identify those records and replace the stuff leading
up to the FROM keyword with DELETE tbl_name.   For  example,
the  SELECT  that  identifies  childless  parents looks like
this:

 SELECT swdist_head.dist_id AS 'unmatched swdist_head IDs'
 FROM swdist_head LEFT JOIN swdist_item
 ON swdist_head.dist_id = swdist_item.dist_id
 WHERE swdist_item.dist_id IS NULL;

The corresponding DELETE looks like this:

 DELETE swdist_head
 FROM swdist_head LEFT JOIN swdist_item
 ON swdist_head.dist_id = swdist_item.dist_id
 WHERE swdist_item.dist_id IS NULL;

Conversely, the query to identify parentless children is  as
follows:

 SELECT swdist_item.dist_id AS 'unmatched swdist_item IDs'
 FROM swdist_item LEFT JOIN swdist_head
 ON swdist_item.dist_id = swdist_head.dist_id
 WHERE swdist_head.dist_id IS NULL;

And the corresponding DELETE statement removes them:

 DELETE swdist_item
 FROM swdist_item LEFT JOIN swdist_head
 ON swdist_item.dist_id = swdist_head.dist_id
 WHERE swdist_head.dist_id IS NULL;
---

This requires that you have MySQL 4.x, because 3.x doesn't support
multiple-table DELETE.  For 3.x, you must write a program that identifies
the unattached records and generates the appropriate statements to delete
them.  (The code for this is in the Cookbook, too; you can get it at
the book's web site.)

-
Before posting, please check:
  http://www.mysql.com/manual.php   (the manual)
  http://lists.mysql.com/   (the list archive)

To request this thread, e-mail [EMAIL PROTECTED]
To unsubscribe, e-mail [EMAIL PROTECTED]
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php




Re: sql delete question - solved

2003-01-08 Thread Veysel Harun Sahin
Hello Paul,

I have tried the code you have written, before posting to list and it did not work. 
When I have seen the sentence This requires that you have MySQL 4.x at your mail I 
realized the problem. I am using mySQL 3.23.49. :(

Thanks for your help.

Paul DuBois [EMAIL PROTECTED] wrote:

At 7:27 -0500 1/8/03, Veysel Harun Sahin wrote:
Hello,

I have two tables whose structures are below.

- Table1 -
table1id int not null auto_increment
data varchar(30)

- Table2 -
table2id int not null auto_increment
table1id int not null
data varchar(30)


These two tables are connected to each other with the table1id 
column. I need to delete rows in table1 which have no corresponding 
table1id values in table2 and also i need to delete rows in table2 
which have no corresponding table1id values in table1. Any 
comments?

Thanks.

sql,query


This sounds like a delete parentless children and childless parents
question.  Turning to my handy copy of MySQL Cookbook which I just happen
to have nearby :-) I see the following under Identifying and Removing
Unattached Records (pp668-669), where the _head and _item are the parent
and child tables that correspond to your table1 and table2:

---
To  use  a  multiple-table  DELETE  statement  for  removing
unmatched records, just take the SELECT statement  that  you
use  to identify those records and replace the stuff leading
up to the FROM keyword with DELETE tbl_name.   For  example,
the  SELECT  that  identifies  childless  parents looks like
this:

      SELECT swdist_head.dist_id AS 'unmatched swdist_head IDs'
      FROM swdist_head LEFT JOIN swdist_item
          ON swdist_head.dist_id = swdist_item.dist_id
      WHERE swdist_item.dist_id IS NULL;

The corresponding DELETE looks like this:

      DELETE swdist_head
      FROM swdist_head LEFT JOIN swdist_item
          ON swdist_head.dist_id = swdist_item.dist_id
      WHERE swdist_item.dist_id IS NULL;

Conversely, the query to identify parentless children is  as
follows:

      SELECT swdist_item.dist_id AS 'unmatched swdist_item IDs'
      FROM swdist_item LEFT JOIN swdist_head
          ON swdist_item.dist_id = swdist_head.dist_id
      WHERE swdist_head.dist_id IS NULL;

And the corresponding DELETE statement removes them:

      DELETE swdist_item
      FROM swdist_item LEFT JOIN swdist_head
          ON swdist_item.dist_id = swdist_head.dist_id
      WHERE swdist_head.dist_id IS NULL;
---

This requires that you have MySQL 4.x, because 3.x doesn't support
multiple-table DELETE.  For 3.x, you must write a program that identifies
the unattached records and generates the appropriate statements to delete
them.  (The code for this is in the Cookbook, too; you can get it at
the book's web site.)


__
The NEW Netscape 7.0 browser is now available. Upgrade now! 
http://channels.netscape.com/ns/browsers/download.jsp 

Get your own FREE, personal Netscape Mail account today at http://webmail.netscape.com/

-
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/   (the list archive)

To request this thread, e-mail [EMAIL PROTECTED]
To unsubscribe, e-mail [EMAIL PROTECTED]
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php




RE: sql delete question

2003-01-08 Thread Adolfo Bello
 I have two tables whose structures are below.
 
 - Table1 - 
 table1id int not null auto_increment
 data varchar(30)
 
 - Table2 -
 table2id int not null auto_increment
 table1id int not null
 data varchar(30)
 
 
 These two tables are connected to each other with the 
 table1id column. I need to delete rows in table1 which have 
 no corresponding table1id values in table2 and also i need 
 to delete rows in table2 which have no corresponding 
 table1id values in table1. Any comments?

Can you try a multi table DELETE? I haven't done it but I would be a shot at
something like
(adapted from MySQL Manual)
DELETE t1 FROM t1,t2 WHERE t1.id=t2.id AND t2.id IS NULL

Adolfo


-
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/   (the list archive)

To request this thread, e-mail [EMAIL PROTECTED]
To unsubscribe, e-mail [EMAIL PROTECTED]
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php