Reputation: 3547
Here are my table setups
Results_class
CREATE TABLE appfilter.results_class (
activity varchar(120) NOT NULL,
class varchar(255) NOT NULL,
PRIMARY KEY (activity, class)
)
Users
CREATE TABLE appfilter.user (
user varchar(15) NOT NULL,
name varchar(100) NOT NULL,
activity_full varchar(200) NOT NULL,
activity varchar(125) NOT NULL,
class varchar(125) NOT NULL
)
The results i want is simple. I want to see all rows where activity matches and class does not.
Example
Results_class
activity class
com.google.android.apps.plus com.google.android.apps.circles.realtimechat.ConversationListActivity
com.google.android.apps.plus com.google.android.apps.plus.phone.ConversationListActivity
Users
activity class
com.google.android.apps.plus com.google.android.apps.circles.realtimechat.ConversationListActivity
I need it to select this missing activity/class which is
activity class
com.google.android.apps.plus com.google.android.apps.plus.phone.ConversationListActivity<br>
I have tried this and it gives me all the activity/classes. Now if i can just remove the ones already in users thats what i need.
SELECT
rc.activity, rc.class
FROM results_class rc
INNER JOIN user b
ON b.activity = rc.activity
Upvotes: 1
Views: 102
Reputation: 2583
Try this .. The below query emulates the MINUS operation ie matches all in class a which are not in b.
SELECT a.activity,a.class FROM results_class a
left join user b on (a.activity = b.activity and a.class = b.class)
where b.class is null
Working fiddle
AFTER EDIT considering the missed information in the question "If there is a activity in results_class and not in users its bringing it back too. I only need matching activities to bring non matching classes"
select a1.activity,a1.class from (select a.activity,a.class FROM results_class a
left join user b on (a.activity = b.activity and a.class = b.class)
where b.class is null) a1 inner join user b1 on a1.activity = b1.activity
Upvotes: 1
Reputation: 25842
Try using a subquery with exists
SELECT rc.activity, rc.class
FROM results_class rc
JOIN users c on c.activity = rc.activity
WHERE NOT EXISTS
( SELECT 1
FROM user b
WHERE b.class = rc.class
)
So basically you get all of the results_class activities when joined to users.. then filter out the classes that are in results_class but not in users.
Upvotes: 0