给我这个加入或加入(MySQL)

时间:2011-09-29 07:21:23

标签: mysql join

SELECT COUNT(*) as snitch_count 
FROM snitchings 
JOIN pimps ON pimps.pimp_id=snitchings.pimp_id 
JOIN prostitutes ON prostitutes.prostitute_id=snitchings.prostitute_id 
WHERE snitchings.case_id=4538;

这就是我所拥有的并且它运行但它似乎不正确(表存在但是没有测试/虚拟数据,所以我不能完全知道)。我相信上面的查询将返回皮条客和妓女的调查总数,作为一对,对于那个特定情况(他们是巨大的情况)。但是我需要查询来返回皮条客或妓女的总金额。如何修复该查询以执行此操作?

免责声明:我可能已经厌倦了几个小时的编码,请原谅我,如果我的语法或解释有点不稳定

1 个答案:

答案 0 :(得分:1)

不,您的查询会在具有有效pimp_id和有效prostitute_id的小贴士中找到行。

您确定需要加入吗?表snitchings可以在prostitute_idpimp_id中包含无效值吗?否则,这将起作用:

SELECT COUNT(*) as snitch_count 
FROM snitchings 
WHERE snitches.prostitute_id IS NOT NULL OR snitches.pimp_id IS NOT NULL

如果你确实需要加入,而且两者都是排他性的(或者是一个小偷是妓女还是皮条客),这应该有效:

SELECT COUNT(*) as snitch_count 
FROM snitchings 
LEFT JOIN pimps ON pimps.pimp_id=snitches.pimp_id 
LEFT JOIN prostitutes ON prostitutes.prostitute_id=snitches.prostitute_id 
WHERE snitchings.case_id=4538 AND 
(pimps.pimp_id IS NOT NULL OR prostitutes.prostitute_id IS NOT NULL)

否则,你需要单独计算它们(但如果你真的想要,你可以使用UNION和SUM:

SELECT COUNT(*) as snitch_count 
FROM snitchings 
JOIN pimps ON pimps.pimp_id=snitches.pimp_id 
WHERE snitchings.case_id=4538;

SELECT COUNT(*) as snitch_count 
FROM snitchings 
JOIN prostitutes ON prostitutes.prostitute_id=snitches.prostitute_id 
WHERE snitchings.case_id=4538;