2012-02-16 42 views
1

我想选择使用内连接到另一个表的行。有COUNT()= 0的困惑

SELECT COUNT(t3.ID), t3.act, t3.dj_id, t1.ID, 
    t1.name, t1.label_id, t1.date, t1.genre, 
    t1.plink, t1.featana, t1.promo_aktif 
FROM `release` t1 
INNER JOIN `acts` t3 ON t3.release_id = t1.ID 
WHERE t1.ID IN ($lst) AND t1.promo_aktif = 'Active' 
AND t3.act = 'hide' AND t3.dj_id = '$id' 
HAVING COUNT(t3.ID) = 0 
ORDER BY t1.ID DESC 
LIMIT 0,15 

在此查询中,结果为空。它选择0行。但我确信有这种条件的行。

查询需要选择t1行的时候没有在t3

我在哪里错在此查询找到的记录?

感谢

编辑

正确的代码是

SELECT t3.act, t3.dj_id, t1.ID, 
    t1.name, t1.label_id, t1.date, t1.genre, 
    t1.plink, t1.featana, t1.promo_aktif 
FROM `release` t1 
LEFT JOIN `acts` t3 ON t3.release_id = t1.ID AND t3.act = 'hide' AND t3.dj_id = '$id' 
WHERE t1.ID IN ($lst) AND t1.promo_aktif = 'Active' 
AND t3.release_id is null 
ORDER BY t1.ID DESC 
LIMIT 0,15 
+6

'查询需要选择T1行的时候没有在t3'找到的记录---不是不是什么' INNER JOIN'应该这样做。 – zerkms 2012-02-16 01:13:31

+0

如何在t3不返回行时选择t3.act? – 2012-02-16 01:17:25

+3

帮助你一个忙,并学习在逗号后面使用空格键。它可以更容易地告诉你正在使用哪个列(当然,我指的是使用't1.name,t1.label_id,t1.date'而不是't1.name,t1.label_id,t1。日期“。第一种情况下,当您需要稍后返回添加或删除列时,它的可读性要高得多,并且使其他人必须阅读它更容易*) – 2012-02-16 01:19:49

回答

0

正确的代码是

SELECT t3.act, t3.dj_id, t1.ID, 
    t1.name, t1.label_id, t1.date, t1.genre, 
    t1.plink, t1.featana, t1.promo_aktif 
FROM `release` t1 
LEFT JOIN `acts` t3 ON t3.release_id = t1.ID AND t3.act = 'hide' AND t3.dj_id = '$id' 
WHERE t1.ID IN ($lst) AND t1.promo_aktif = 'Active' 
AND t3.release_id is null 
ORDER BY t1.ID DESC 
LIMIT 0,15 
0

试试这个:

SELECT t3.act, t3.dj_id, t1.ID, 
    t1.name, t1.label_id, t1.date, t1.genre, 
    t1.plink, t1.featana, t1.promo_aktif 
FROM `release` t1 
LEFT JOIN `acts` t3 ON t3.release_id = t1.ID 
WHERE t1.ID IN ($lst) AND t1.promo_aktif = 'Active' 
    AND t3.act = 'hide' AND t3.dj_id = '$id' 
      AND t3.release_id is null 
ORDER BY t1.ID DESC 
LIMIT 0,15 

不知道你的代码,我不相信这个条件:t3.dj_id = '$id'

+0

不起作用。它还显示在t3 – 2012-02-16 01:23:46

+0

中找到的行仍然不起作用。我看到空的结果。 – 2012-02-16 01:28:22

+0

然后它只是你的过滤器的问题。在你的代码中必须出现错误:'t1.ID IN($ lst)AND t1.promo_aktif ='Active'AND t3.act ='hide'AND t3.dj_id ='$ id''。通过“错误”我的意思是它过滤比它应该更多。删除所有这些过滤器并逐步添加它们以查找。特别注意't3.dj_id ='$ id'' – 2012-02-16 01:39:37

0

这应该给你想要的结果:

SELECT t1.ID, 
    t1.name, t1.label_id, t1.date, t1.genre, 
    t1.plink, t1.featana, t1.promo_aktif 
FROM `release` t1 
LEFT JOIN `acts` t3 ON t3.release_id = t1.ID 
WHERE t1.ID IN ($lst) AND t1.promo_aktif = 'Active' 
AND t3.release_id IS NULL 
ORDER BY t1.ID DESC 
LIMIT 0,15