MySQL查询以选择一列匹配而一列不匹配的行

时间:2014-08-24 19:33:28

标签: mysql

以下是我的表格设置

Results_class

CREATE TABLE appfilter.results_class (
 activity varchar(120) NOT NULL,
 class varchar(255) NOT NULL,
 PRIMARY KEY (activity, class)
)

用户

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
)

我想要的结果很简单。我希望看到活动匹配的所有行和类不匹配的行。

示例

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

用户

activity                        class
com.google.android.apps.plus    com.google.android.apps.circles.realtimechat.ConversationListActivity

我需要它来选择

这个缺少的活动/类
activity                        class
com.google.android.apps.plus    com.google.android.apps.plus.phone.ConversationListActivity<br>

我试过这个,它给了我所有的活动/课程。现在,如果我可以删除那些已经存在于我需要的内容中的那些。

SELECT
  rc.activity, rc.class
FROM results_class rc
  INNER JOIN user b
    ON b.activity = rc.activity

2 个答案:

答案 0 :(得分:1)

试试这个..以下查询模拟MINUS操作,即匹配a类中不在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

工作fiddle

编辑后 考虑到问题中遗漏的信息 &#34;如果在results_class中有活动而在用户中没有活动,那么它也会将其恢复。我只需要匹配活动来带来不匹配的类&#34;

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

答案 1 :(得分:0)

尝试使用存在

的子查询
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
)

所以基本上你在加入用户时得到所有的results_class活动..然后过滤掉results_class中但不在用户中的类。

WORKING FIDDLE