> SQL does not exist in a vacuum.
> You have to run a client.
> The client is part of or runs under some scripting language ( perl ,
> php, sh, command.com )
> which in turn runs on an operating system.
> You have to somehow pass values that you want to select, update,
> or insert.
> So it really not possible to run JUST SQL.
> What are you using?

mysql < foo.sql

Our nightly report generation script is a 400 line .sql file.  Our hourly
report generation script is a 280 line .sql file.  No scripting language
using some DB API to feed queries to the server -- just "mysql <
whatever.sql".

What one can accomplish with this approach is quite limited by the fact that
MySQL's SQL implementation doesn't rise to the level of full programming
language unlike, for example, Oracle's PL/SQL in which it is quite possible
to write loops, conditional logic, etc.


Now, to address the original question:

If field X is a unique field (PRIMARY KEY or UNIQUE INDEX) you could try
this:
INSERT IGNORE INTO whatever SET x = '1234', ...;
UPDATE whatever SET ... WHERE x = '1234';

Under ideal circumstances this results in a bit of redundant DB access,
which may or may not matter to you depending on your circumstances.

If there is no uniqueness constraint on field x, then this technique will
not work and it's unlikely that just SQL (MySQL's SQL anyway) will be
adequate.

The TODO list for MySQL contains exactly this item though ("update a row if
it exists, otherwise insert it", aka "REPLACE INTO behavior for UPDATEs")
but no estimate as to when it will be included.

-JF

>
> Corey Wallis wrote:
>
> >Peoples,
> >
> >I'm currently trying to work out if this is possible by SQL. I
> have the need
> >to use SQL and only SQL to achieve the following.
> >
> >If a record exists and meets a certain criteria (i.e. field X =
> '1234') then
> >update the record. If the record doesn't exist then insert it.
> >
> >For reasons too complex to go into at this stage using anything
> except SQL
> >is not possible.
> >
> >Any and all suggestions welcome.
> >
> >-Corey
> >
> >
> >---------------------------------------------------------------------
> >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
> >
> >
>
>
>
> ---------------------------------------------------------------------
> 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
>
>


---------------------------------------------------------------------
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

Reply via email to