Hi Bruce,

bruce wrote:
hi.

i've got a situation, where i'm trying to figure out how to select an item
from tblA that may/maynot be in tblB.

if the item is only in tblA, i can easilty get a list of the items
 select * from tblA

if the item is in tblA but not linked to tblB, i can get the items as well
 select * from tblA where id not in (select id from tblB);

but i have no idea how to combine the two selects..

i need to combine them, as the app can create tblA for a given item, and
then later on create the data in tblB, with thblA.id = tblB.aid.

thoughts/pointers on this would be appreciated.


Just as the other reply said, you need a JOIN. Specifically you need one of the OUTER JOIN such as LEFT JOIN or RIGHT JOIN. Here's the pattern for "exists in A and is/is not in B" (using the fields you specified in your sample)

SELECT ...
FROM a
LEFT JOIN b
  ON a.id = b.aid

Any row where b.id is null would indicate a mismatch (the row exists in A but not in B). So you can test for things like

"all rows in A that have no match in B"

SELECT ...
FROM a
LEFT JOIN b
  ON a.id = b.aid
WHERE b.id IS NULL

"all rows in B that have no match in A"

SELECT ...
FROM b
LEFT JOIN a
  ON a.id = b.aid
WHERE a.id IS NULL

- or -

SELECT ...
FROM a
RIGHT JOIN b
  ON a.id = b.aid
WHERE a.id is null

"only rows from A or B that have a matching row in in the other table"

SELECT ...
FROM a
INNER JOIN b
  ON a.id = b.id

"All Rows from A and only those matching rows from B where b.datecol > '2009-06-13' "

SELECT ...
FROM a
LEFT JOIN b
  ON a.id = b.id
  AND b.datecol > '2009-06-13'

- this will NOT work -

SELECT ...
FROM a
LEFT JOIN b
  ON a.id = b.id
WHERE b.datecol > '2009-06-13'

It will not work because the WHERE clause will filter from the results any rows from A where b.datecol is not > '2009-06-13' which would include those rows from A that had no matching row from B (effectively turning the LEFT join into an INNER join). Try it both ways and see.

Yours,

--
Shawn Green, MySQL Senior Support Engineer
Sun Microsystems, Inc.
Office: Blountville, TN



--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/mysql?unsub=arch...@jab.org

Reply via email to