dbTalk Databases Forums  

Novice MySQL Query

comp.databases.mysql comp.databases.mysql


Discuss Novice MySQL Query in the comp.databases.mysql forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
superman183
 
Posts: n/a

Default Novice MySQL Query - 05-09-2008 , 06:44 AM






Hi,

Hoping someone can assist me with a query I have.

I have two tables, both of which have at least one field of the same
name, type, etc, etc. This field I will call SKEY, for the purposes of
this post. SKEY is a CHAR field, 4 chars in length.

One of the tables, we'll say Table1, has the complete list of
available SKEY's. Table2, on the other hand, contains only some of the
available SKEY's.

I want to be able to find out which SKEY's are missing from Table2;
ie. which SKEY's are in Table1, but not in Table2.

I have tried several different queries, but generally end up in a bit
of a mess, more often returning tens of thousands of results, when in
fact there are only a couple of hundred records in total.

My pseudo-code would be something like:

SELECT SKEY FROM TABLE1 WHERE TABLE1.SKEY NOT LIKE TABLE2.SKEY

The basic query which I tried is:

SELECT TABLE1.SKEY FROM TABLE1 JOIN TABLE2 WHERE TABLE1.SKEY NOT LIKE
TABLE2.SKEY

I also tried a few variations, with DISTINCT, etc, etc ... but I never
end up with anything close to what I need.

So, I'm sure I'm missing some basic knowledge about such a query. I
realise I'm getting thousands of records returned because it's testing
every single record in Table1 against every single record in
Table2 ... but I don't get how to do the type of query I want.

Any assistance much appreciated!

Superman183

Reply With Quote
  #2  
Old   
Rik Wasmus
 
Posts: n/a

Default Re: Novice MySQL Query - 05-09-2008 , 06:54 AM






superman183 wrote:
Quote:
Hoping someone can assist me with a query I have.

I have two tables, both of which have at least one field of the same
name, type, etc, etc. This field I will call SKEY, for the purposes of
this post. SKEY is a CHAR field, 4 chars in length.

One of the tables, we'll say Table1, has the complete list of
available SKEY's. Table2, on the other hand, contains only some of the
available SKEY's.

I want to be able to find out which SKEY's are missing from Table2;
ie. which SKEY's are in Table1, but not in Table2.

I have tried several different queries, but generally end up in a bit
of a mess, more often returning tens of thousands of results, when in
fact there are only a couple of hundred records in total.

My pseudo-code would be something like:

SELECT SKEY FROM TABLE1 WHERE TABLE1.SKEY NOT LIKE TABLE2.SKEY

The basic query which I tried is:

SELECT TABLE1.SKEY FROM TABLE1 JOIN TABLE2 WHERE TABLE1.SKEY NOT LIKE
TABLE2.SKEY

I also tried a few variations, with DISTINCT, etc, etc ... but I never
end up with anything close to what I need.
If SKEY in TABLE2 cannot be null.

SELECT TABLE1.SKEY FROM TABLE1
LEFT JOIN TABLE2 ON TABLE2.SKEY = TABLE1.SKEY
WHERE TABLE2,SKEY IS NULL;
--
Rik Wasmus
[SPAM]
Now looking for some smaller projects to work on to fund a bigger one
with delayed pay. If interested, mail rik at rwasmus.nl
[/SPAM]


Reply With Quote
  #3  
Old   
Captain Paralytic
 
Posts: n/a

Default Re: Novice MySQL Query - 05-09-2008 , 08:21 AM



On 9 May, 11:54, Rik Wasmus <luiheidsgoe... (AT) hotmail (DOT) com> wrote:
Quote:
superman183 wrote:
Hoping someone can assist me with a query I have.

I have two tables, both of which have at least one field of the same
name, type, etc, etc. This field I will call SKEY, for the purposes of
this post. SKEY is a CHAR field, 4 chars in length.

One of the tables, we'll say Table1, has the complete list of
available SKEY's. Table2, on the other hand, contains only some of the
available SKEY's.

I want to be able to find out which SKEY's are missing from Table2;
ie. which SKEY's are in Table1, but not in Table2.

I have tried several different queries, but generally end up in a bit
of a mess, more often returning tens of thousands of results, when in
fact there are only a couple of hundred records in total.

My pseudo-code would be something like:

SELECT SKEY FROM TABLE1 WHERE TABLE1.SKEY NOT LIKE TABLE2.SKEY

The basic query which I tried is:

SELECT TABLE1.SKEY FROM TABLE1 JOIN TABLE2 WHERE TABLE1.SKEY NOT LIKE
TABLE2.SKEY

I also tried a few variations, with DISTINCT, etc, etc ... but I never
end up with anything close to what I need.

If SKEY in TABLE2 cannot be null.

SELECT TABLE1.SKEY FROM TABLE1
LEFT JOIN TABLE2 ON TABLE2.SKEY = TABLE1.SKEY
WHERE TABLE2,SKEY IS NULL;
--
Rik Wasmus
[SPAM]
Now looking for some smaller projects to work on to fund a bigger one
with delayed pay. If interested, mail rik at rwasmus.nl
[/SPAM]
SELECT TABLE1.SKEY FROM TABLE1
LEFT JOIN TABLE2 ON TABLE2.SKEY = TABLE1.SKEY
WHERE TABLE2.SKEY IS NULL;

(replaced comma with full stop)


Reply With Quote
  #4  
Old   
Rik Wasmus
 
Posts: n/a

Default Re: Novice MySQL Query - 05-09-2008 , 08:36 AM



Captain Paralytic wrote:
Quote:
On 9 May, 11:54, Rik Wasmus <luiheidsgoe... (AT) hotmail (DOT) com> wrote:
superman183 wrote:
Hoping someone can assist me with a query I have.
I have two tables, both of which have at least one field of the same
name, type, etc, etc. This field I will call SKEY, for the purposes of
this post. SKEY is a CHAR field, 4 chars in length.
One of the tables, we'll say Table1, has the complete list of
available SKEY's. Table2, on the other hand, contains only some of the
available SKEY's.
I want to be able to find out which SKEY's are missing from Table2;
ie. which SKEY's are in Table1, but not in Table2.
I have tried several different queries, but generally end up in a bit
of a mess, more often returning tens of thousands of results, when in
fact there are only a couple of hundred records in total.
My pseudo-code would be something like:
SELECT SKEY FROM TABLE1 WHERE TABLE1.SKEY NOT LIKE TABLE2.SKEY
The basic query which I tried is:
SELECT TABLE1.SKEY FROM TABLE1 JOIN TABLE2 WHERE TABLE1.SKEY NOT LIKE
TABLE2.SKEY
I also tried a few variations, with DISTINCT, etc, etc ... but I never
end up with anything close to what I need.
If SKEY in TABLE2 cannot be null.

SELECT TABLE1.SKEY FROM TABLE1
LEFT JOIN TABLE2 ON TABLE2.SKEY = TABLE1.SKEY
WHERE TABLE2,SKEY IS NULL;
--
Rik Wasmus
[SPAM]
Now looking for some smaller projects to work on to fund a bigger one
with delayed pay. If interested, mail rik at rwasmus.nl
[/SPAM]
SELECT TABLE1.SKEY FROM TABLE1
LEFT JOIN TABLE2 ON TABLE2.SKEY = TABLE1.SKEY
WHERE TABLE2.SKEY IS NULL;

(replaced comma with full stop)
Hmmm, What excuse will I use now? National holidays have been over for a
few days is wat sent sober & at a normal hour...

I know: "Damn those laptop keyboards, give a me a real one!"

Thanks for the correction
--
Rik Wasmus
[SPAM]
Now looking for some smaller projects to work on to fund a bigger one
with delayed pay. If interested, mail rik at rwasmus.nl
[/SPAM]


Reply With Quote
  #5  
Old   
Captain Paralytic
 
Posts: n/a

Default Re: Novice MySQL Query - 05-09-2008 , 09:43 AM



On 9 May, 13:36, Rik Wasmus <luiheidsgoe... (AT) hotmail (DOT) com> wrote:
Quote:
Hmmm, What excuse will I use now? National holidays have been over for a
few days is wat sent sober & at a normal hour...
There's your excuse. Never try to work sober!


Reply With Quote
  #6  
Old   
Rik Wasmus
 
Posts: n/a

Default Re: Novice MySQL Query - 05-09-2008 , 10:41 AM



Captain Paralytic wrote:
Quote:
On 9 May, 13:36, Rik Wasmus <luiheidsgoe... (AT) hotmail (DOT) com> wrote:
Hmmm, What excuse will I use now? National holidays have been over for a
few days is wat sent sober & at a normal hour...
There's your excuse. Never try to work sober!
I like it how I managed to get a completely bogus sentence:'..is wat
sent..' while claiming to be sober .

s/is wat/and was/
--
Rik Wasmus
[SPAM]
Now looking for some smaller projects to work on to fund a bigger one
with delayed pay. If interested, mail rik at rwasmus.nl
[/SPAM]


Reply With Quote
  #7  
Old   
Jerry Stuckle
 
Posts: n/a

Default Re: Novice MySQL Query - 05-09-2008 , 11:41 AM



Rik Wasmus wrote:
Quote:
Captain Paralytic wrote:
On 9 May, 13:36, Rik Wasmus <luiheidsgoe... (AT) hotmail (DOT) com> wrote:
Hmmm, What excuse will I use now? National holidays have been over for a
few days is wat sent sober & at a normal hour...
There's your excuse. Never try to work sober!

I like it how I managed to get a completely bogus sentence:'..is wat
sent..' while claiming to be sober .

s/is wat/and was/
Rik, you haven't been sober a day in your life! <gd&r>

--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex (AT) attglobal (DOT) net
==================



Reply With Quote
  #8  
Old   
user
 
Posts: n/a

Default Re: Novice MySQL Query - 05-09-2008 , 05:31 PM



On Fri, 09 May 2008 04:44:55 -0700, superman183 wrote:

Quote:
Hi,

Hoping someone can assist me with a query I have.

I have two tables, both of which have at least one field of the same
name, type, etc, etc. This field I will call SKEY, for the purposes of
this post. SKEY is a CHAR field, 4 chars in length.

One of the tables, we'll say Table1, has the complete list of available
SKEY's. Table2, on the other hand, contains only some of the available
SKEY's.

I want to be able to find out which SKEY's are missing from Table2; ie.
which SKEY's are in Table1, but not in Table2.

I have tried several different queries, but generally end up in a bit of
a mess, more often returning tens of thousands of results, when in fact
there are only a couple of hundred records in total.

My pseudo-code would be something like:

SELECT SKEY FROM TABLE1 WHERE TABLE1.SKEY NOT LIKE TABLE2.SKEY

The basic query which I tried is:

SELECT TABLE1.SKEY FROM TABLE1 JOIN TABLE2 WHERE TABLE1.SKEY NOT LIKE
TABLE2.SKEY

I also tried a few variations, with DISTINCT, etc, etc ... but I never
end up with anything close to what I need....

Have you tried this code?

select skey from table1, table2 where table1.skey not in table2.skey

Or, pulling your complete second table as a sub-query (I think this may
be needed; it's been a while):

select a.skey from table1 a, (select distinct skey from table2) b where
a.skey not in b

Luck



Reply With Quote
  #9  
Old   
superman183
 
Posts: n/a

Default Re: Novice MySQL Query - 05-12-2008 , 05:59 AM



Many thanks to all respondents, much appreciated!

Superman183



Reply With Quote
  #10  
Old   
Captain Paralytic
 
Posts: n/a

Default Re: Novice MySQL Query - 05-12-2008 , 06:25 AM



On 9 May, 23:31, user <u... (AT) 127 (DOT) 0.0.1> wrote:
Quote:
On Fri, 09 May 2008 04:44:55 -0700, superman183 wrote:
Hi,

Hoping someone can assist me with a query I have.

I have two tables, both of which have at least one field of the same
name, type, etc, etc. This field I will call SKEY, for the purposes of
this post. SKEY is a CHAR field, 4 chars in length.

One of the tables, we'll say Table1, has the complete list of available
SKEY's. Table2, on the other hand, contains only some of the available
SKEY's.

I want to be able to find out which SKEY's are missing from Table2; ie.
which SKEY's are in Table1, but not in Table2.

I have tried several different queries, but generally end up in a bit of
a mess, more often returning tens of thousands of results, when in fact
there are only a couple of hundred records in total.

My pseudo-code would be something like:

SELECT SKEY FROM TABLE1 WHERE TABLE1.SKEY NOT LIKE TABLE2.SKEY

The basic query which I tried is:

SELECT TABLE1.SKEY FROM TABLE1 JOIN TABLE2 WHERE TABLE1.SKEY NOT LIKE
TABLE2.SKEY

I also tried a few variations, with DISTINCT, etc, etc ... but I never
end up with anything close to what I need....

Have you tried this code?

select skey from table1, table2 where table1.skey not in table2.skey

Or, pulling your complete second table as a sub-query (I think this may
be needed; it's been a while):

select a.skey from table1 a, (select distinct skey from table2) b where
a.skey not in b

Luck
Luck, good name

A lot of luck will be needed to get your first proposal to work.

As to your second one, Rik's solution does it far more efficiently.

As a general rule, use JOINs (or LEFT JOINs) wherever possible and
avoid sub-selects such as yours.

Also, always code explicit JOINs rather than implicit comma joins.


Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.3
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.