180

I have 2 subqueries, but I'm having trouble joining columns together from the same tables. I tried:

SELECT * FROM

(SELECT userid, listid 
FROM user_views_table
WHERE date='2013-05-15' AND view_type='lists') a

JOIN

(SELECT sourceid, destinationid
FROM actions_table
WHERE date='2013-05-15' AND payloadtype='lists_user' AND actiontype='delete') b

ON a.userid = b.sourceid
ON a.listid = b.destinationid;

If I simply end the query with ON a.userid = b.sourceid it works, but how can I also join these tables on another column also ON a.listid = b.destinationid ??

Any help appreciated.

Mong Zhu
  • 23,309
  • 10
  • 44
  • 76
user1899415
  • 3,015
  • 7
  • 22
  • 31

2 Answers2

278

You need to replace the second ON with AND, like this:

ON a.userid = b.sourceid AND a.listid = b.destinationid;
Alok Singhal
  • 93,253
  • 21
  • 125
  • 158
Zoran Horvat
  • 10,924
  • 3
  • 31
  • 43
  • 9
    It seems obvious looking back on it, but I wanted to note that an OR works as well, you just end up with a LOT of records. – wastubbs Mar 17 '14 at 16:47
  • 1
    @wastubbs, not 100% but I think joining with OR has terrible performance and UNION is recommended – CervEd Dec 21 '20 at 13:40
92

You want to join on condition 1 AND condition 2, so simply use the AND keyword as below

ON a.userid = b.sourceid AND a.listid = b.destinationid;
Paul McLoughlin
  • 2,283
  • 1
  • 15
  • 15