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是的,你的例子非常有效!我不知道为什么,我得仔细阅读一下内部连接。不知道为什么我的不行,但你的似乎很好用。谢谢你的帮助。