Mysql 仅选择出现一次ID的行

Mysql 仅选择出现一次ID的行,mysql,sql,Mysql,Sql,我有两个数据库表,如下所示: Knowledge id | Title -------------------------- 3 Hi 6 Hello 7 Yo 5 Jump Sorting id + kID ------------------------

我有两个数据库表,如下所示:

Knowledge
id          |        Title
--------------------------
3                     Hi
6                     Hello
7                     Yo
5                     Jump


Sorting
id          +        kID       
--------------------------
0           |         3
1           |         6
2           |         7
3           |         6
4           |         7
5           |         5
我正在尝试从排序表中只选择一个kID出现的行,这就是我尝试的:

SELECT Knowledge.*, Sorting.*
FROM Knowledge, Sorting 
WHERE Knowledge.id = Sorting.KID
GROUP BY Sorting.KID 
    HAVING COUNT(Sorting.KID)<2
ORDER BY Sorting.SortOrder
LIMIT 0,8
出于某种原因,它仍然会返回所有内容,而不是我试图实现的Hi和跳跃

SELECT Knowledge.*, Sorting.*
FROM Knowledge, Sorting 
WHERE Knowledge.id = Sorting.KID
group by kID
having count(id) < 2

问题是您在错误的字段上进行计数

我建议使用子查询来获得结果:

select k.id, k.title
from knowledge k
inner join
(
  select kID
  from sorting
  group by kID
  having count(kID) < 2
) s
  on k.id = s.kid
LIMIT 0,8;


子查询将只返回排序表中具有单个计数的行,然后您可以使用此结果连接到知识表。

您的查询甚至不引用知识表,因此充其量是不完整的,充其量是错误的。我相信是后者。@MadBreaks你高兴吗?我所做的只是从原始查询中添加连接,这是任何程序员都可以自己完成的:P。您确定这就是您正在运行的查询吗?我觉得没问题,但我注意到它使用的列不在示例数据中。我很确定,我没有发现任何错误,为了简单起见,我还省略了“排序顺序”列。我刚刚记得我在查询中留下了排序表,以显示为什么我首先要合并这些表。@Talon您希望结果是什么?看到这个演示了吗?它返回hi和jump@bluefeet是的,你的例子非常有效!我不知道为什么,我得仔细阅读一下内部连接。不知道为什么我的不行,但你的似乎很好用。谢谢你的帮助。