Joins that compare values within the same column of one table are called self-joins. To distinguish the two roles in which the table appears, use aliases, or correlation names.
select au1.au_fname, au1.au_lname, au2.au_fname, au2.au_lname from authors au1, authors au2 where au1.city = "Oakland" and au2.city = "Oakland" and au1.state = "CA" and au2.state = "CA" and au1.postalcode = au2.postalcode
au_fname au_lname au_fname au_lname --------- ----------- -------- -------- Marjorie Green Marjorie Green Dick Straight Dick Straight Dick Straight Dirk Stringer Dick Straight Livia Karsen Dirk Stringer Dick Straight Dirk Stringer Dirk Stringer Dirk Stringer Livia Karsen Stearns MacFeather Stearns MacFeather Livia Karsen Dick Straight Livia Karsen Dirk Stringer Livia Karsen Livia Karsen (11 rows affected)
List the aliases in the from clause in the same order as you refer to them in the select list, as in this example. Depending on the query, the results may be ambiguous if you list them in a different order.
To eliminate the rows in the results where the authors match themselves, and are identical except that the order of the authors is reversed, you can make this addition to the self-join query:
select au1.au_fname, au1.au_lname, au2.au_fname, au2.au_lname from authors au1, authors au2 where au1.city = "Oakland" and au2.city = "Oakland" and au1.state = "CA" and au2.state = "CA" and au1.postalcode = au2.postalcode and au1.au_id < au2.au_id
au_fname au_lname au_fname au_lname --------- ----------- --------- --------- Dick Straight Dirk Stringer Dick Straight Livia Karsen Dirk Stringer Livia Karsen (3 rows affected)
It is now clear that Dick Straight, Dirk Stringer, and Livia Karsen all have the same postal code.