Novice MySQL Query

This is a discussion on Novice MySQL Query within the MySQL Database forums, part of the Database Forums category; Hi, Hoping someone can assist me with a query I have. I have two tables, both of which have at ...


Go Back   Usenet Forums > Database Forums > MySQL Database

FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 4 Days Ago
superman183
 
Posts: n/a
Default Novice MySQL Query

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 (permalink)  
Old 4 Days Ago
Rik Wasmus
 
Posts: n/a
Default Re: Novice MySQL Query

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]
Reply With Quote
  #3 (permalink)  
Old 3 Days Ago
user
 
Posts: n/a
Default Re: Novice MySQL Query

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

Reply With Quote
  #4 (permalink)  
Old 1 Day Ago
superman183
 
Posts: n/a
Default Re: Novice MySQL Query

Many thanks to all respondents, much appreciated!

Superman183


Reply With Quote
  #5 (permalink)  
Old 1 Day Ago
Captain Paralytic
 
Posts: n/a
Default Re: Novice MySQL Query

On 9 May, 23:31, user <u...@127.0.0.1> wrote:
> 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 Off
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On



All times are GMT +1. The time now is 06:17 PM.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.0.0