查询逻辑,错误的期望结果mysql
问题是,假设按id排序的前两个结果在app_详细信息中,那么前两个结果的计数*不等于0。但在MobileApps表中有更多的结果,它们将等于0 我想它应该首先从app_details中选择*trackId=dtable.SourceID=0,然后按id订购ASC LIMIT 0,2,而不是相反,有什么可能的方法可以解决这个问题查询逻辑,错误的期望结果mysql,mysql,Mysql,问题是,假设按id排序的前两个结果在app_详细信息中,那么前两个结果的计数*不等于0。但在MobileApps表中有更多的结果,它们将等于0 我想它应该首先从app_details中选择*trackId=dtable.SourceID=0,然后按id订购ASC LIMIT 0,2,而不是相反,有什么可能的方法可以解决这个问题 谢谢你的查询,但是更好的方法是: SELECT * FROM MobileApps as dtable WHERE (SELECT COUNT(*) as c
谢谢你的查询,但是更好的方法是:
SELECT * FROM
MobileApps as dtable
WHERE (SELECT COUNT(*) as c
FROM app_details
WHERE trackId=dtable.SourceID)=0
ORDER BY id ASC
LIMIT 0,2
或:
请参见此处的所有3个版本:
对于一个大的表,您可能应该对它们进行基准测试,看看哪一个MySQL优化得最好。它对我来说是正确的:闻起来像是一个流产。。。不存在选择。。。对我来说。问:你想从没有应用程序详细信息的MobileApps获取所有信息,对吗?如果这是OP的任务,我更喜欢第二种选择,更紧凑、更清晰。
SELECT dtable.*
FROM MobileApps dtable
LEFT JOIN app_details d ON d.trackId = dtable.SourceID
WHERE d.trackId IS NULL
ORDER BY dtable.id
LIMIT 0, 2
SELECT *
From MobileApps dtable
WHERE NOT EXISTS (SELECT *
FROM app_details d
WHERE d.trackId = dtable.SourceID)
ORDER BY id
LIMIT 0, 2