Chris,

sounds like you're looking for an exclusive left outer join.
You want to see records from monitorhosts, where there is no corresponding
record
in monitorhostgroupdetails, right?

Use:

Select *
  from monitorhosts left join monitorhostgroupdetails on
 monitorhosts.HostID = monitorhostgroupdetails.HostID
where monitorhostgroupdetails.HostID is null
;
+--------+-----------+-------------------+-------------+--------+
| hostID | CompanyID | HostGroupDetailID | HostGroupID | HostID |
+--------+-----------+-------------------+-------------+--------+
|      7 |         1 |              NULL |        NULL |   NULL |
+--------+-----------+-------------------+-------------+--------+

The trick is the "is null" which trims the result set to only show those
join-results which
could find no right-hand record to join to.

hth,
Kevin

> -----Original Message-----
> From: Chris Knipe [mailto:[EMAIL PROTECTED]]
> Sent: Thursday, June 06, 2002 1:52 PM
> To: [EMAIL PROTECTED]
> Subject: Re: sub-queries
>
>
> Ok, I spoke to soon... And this is starting to drive me up
> the walls now...
> i.e. getting REALLY irritating and frustrating.
>
> mysql> DESCRIBE monitorhosts;
> +----------------------+--------------+------+-----+---------+
> --------------
> --+
> | Field                | Type         | Null | Key | Default | Extra
> |
> +----------------------+--------------+------+-----+---------+
> --------------
> --+
> | HostID               | tinyint(4)   |      | PRI | NULL    |
> auto_increment |
> | CompanyID            | tinyint(4)   |      | MUL | 0       |
> |
> +----------------------+--------------+------+-----+---------+
> --------------
> --+
> 2 rows in set (0.29 sec)
>
> mysql> DESCRIBE monitorhostgroupdetails;
> +-------------------+--------------+------+-----+---------+---
> -------------+
> | Field             | Type         | Null | Key | Default |
> Extra          |
> +-------------------+--------------+------+-----+---------+---
> -------------+
> | HostGroupDetailID | mediumint(9) |      | PRI | NULL    |
> auto_increment |
> | HostGroupID       | mediumint(9) |      | MUL | 0       |
>              |
> | HostID            | mediumint(9) |      | MUL | 0       |
>              |
> +-------------------+--------------+------+-----+---------+---
> -------------+
> 3 rows in set (0.02 sec)
>
> mysql>
>
> Now, here's the catch.... The HostID field from monitorhosts,
> is a itemID
> for a server entry.  This server entry is unique, can be in
> one, multiple or
> even in no group AT ALL.
>
> monitorhostgroupdetails maps a hostID to a groupID, and
> consist of a unique
> ID (i.e. only one unique hostID is allowed in one
> GroupID)....  All the
> statements I got so far, list only the hostID if they are in
> a group... Not
> if they aren't in a group AT ALL.
>
> monitorhosts table data:
> |      1 |         1 |
> |      7 |         1 |
>
> >From this, I can see that I have HostID 1 & 7, assigned to
> CompanyID 1.
>
> monitorhostgroupdetails table data:
> |                51 |           1 |      1 |
>
> Here, I can see HostID 1 belongs to HostGroup 1.  The results
> on all the
> various queries I tried and that's been suggested...
>
> Select monitorhosts.HostID
>   from monitorhosts left join monitorhostgroupdetails on
> monitorhostgroupdetails.HostID = monitorhosts.HostID
>  where monitorhostgroupdetails.HostGroupID !='1';
>
> This returns no data from the monitorhosts table, even through we have
> HostID which isn't in a group.  When HostGroupID  is changed
> to 2, HostID 1
> is returned (because it is in the hostgroup table), but
> hostid 7 which isn't
> in a group, is still left out of the equasion.
>
> SELECT monitorhosts.HostID, monitorhosts.HostDescription FROM
> monitorhosts,
> monitorhostgroupdetails WHERE monitorhosts.HostID =
> monitorhostgroupdetails.HostID AND
> monitorhostgroupdetails.HostGroupID !=
> '1' AND monitorhosts.CompanyID='1';
>
> Nothing is returned.  My gut tells me the same happens as
> with the previous
> query.
>
> In otherwords, the queries will *only* return any hostID
> data, if the host
> is in the monitorhostgroupdetails table, which, isn't going
> to be right.  A
> host is registered in the database, and only certain hosts,
> under certain
> curcumstances is grouped.  Basically, what I want to do now,
> is that when a
> client modifies the servers assigned in a group, I only want
> to list the
> servers which is NOT allready in that specific group.....
>
> Is this possible, or am I really going to have to use PHP
> arrays and compare
> arrays with hundreds of thousands of values in them??  *deep sigh*
>
>
> ----- Original Message -----
> From: "Chris Knipe" <[EMAIL PROTECTED]>
> To: <[EMAIL PROTECTED]>
> Sent: Thursday, June 06, 2002 10:16 PM
> Subject: Re: sub-queries
>
>
> > *MWAH*!!!!!!!!!!!
> >
> > Thanks a million, tested and working beautifully.... Can't
> believe in two
> > days I didn't think of this...
> >
> > --
> > me
> >
> >
> > ----- Original Message -----
> > From: "Sabine Richter" <[EMAIL PROTECTED]>
> > To: "Chris Knipe" <[EMAIL PROTECTED]>
> > Cc: <[EMAIL PROTECTED]>
> > Sent: Thursday, June 06, 2002 10:14 PM
> > Subject: Re: sub-queries
> >
> >
> > > SELECT monitorhosts.HostID
> > > FROM monitorhosts, monitorhostgroupdetails
> > > WHERE monitorhosts.HostID =  monitorhostgroupdetails.HostID
> > > AND monitorhostgroupdetails.HostGroupID != '1');
> > >
> > > Gruss
> > > Sabine
> > >
> > > Chris Knipe wrote:
> > > >
> > > > Lo all,
> > > >
> > > > are sub-queries supported on mysql-max 3.23.49 ??
> > > >
> > > > If they are, what's wrong with the following statement?
> > > >
> > > > SELECT monitorhosts.HostID
> > > >     FROM monitorhosts
> > > >    WHERE monitorhosts.HostID NOT IN
> > > >          (SELECT HostID
> > > >             FROM monitorhostgroupdetails
> > > >            WHERE monitorhostgroupdetails.HostGroupID='1');
> > > >
> > > > mysql complains about a syntax error right at the
> begining of the
> second
> > > > select...
> > > >
> > > > ERROR 1064: You have an error in your SQL syntax near
> 'SELECT HostID
> > > >             FROM monitorhostgroupdetails
> > > >            WHERE monitorh' at line 4
> > > >
> > > > ty
> > > >
> > > >
> ---------------------------------------------------------------------
> > > > 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