SQL:将EXISTS()与其他命令一起使用

时间:2011-10-26 02:14:49

标签: php mysql sql

我有以下SQL代码:

SELECT m.email
FROM members as m
WHERE exists 
(
select * 
from posts as p
where p.email = m.email
)
order by ads desc

我想在"存在"之前添加另一个声明,以便我有类似

的内容
SELECT m.email
FROM members as m
WHERE 
(m.ads<>0) 
and 
exists 
(
select * 
from posts as p
where p.email = m.email
)
order by ads desc

但它不起作用,以及ads<>'0'ads<>('0')m.ads<>0等。

为什么你认为它不起作用?

通过&#34;不工作&#34;我的意思是,当我添加一行&#39; ads&lt;&gt; 0&#39;查询结果没有变化(好像我没有输入这一行)。 如果我添加一行&#39; ads = 0&#39;相反 - 它给出空结果,好像没有任何值为零的字段(实际存在)

2 个答案:

答案 0 :(得分:1)

您应该可以根据需要为WHERE语句添加尽可能多的逻辑子句。

假设members.ads是整数数据类型......

SELECT m.email
FROM members m
WHERE m.ads <> 0
AND EXISTS (
    SELECT 1
    FROM posts p
    WHERE p.email = m.email
)
ORDER BY m.ads DESC

答案 1 :(得分:0)

您应该能够在展示时使用EXISTS。你也可以把它写成一个连接,当然:

SELECT DISTINCT m.email
  FROM members AS m
  JOIN posts AS p ON p.email = m.email
 WHERE (m.ads<>0) 
 ORDER BY ads DESC

或者,您可能决定使用子查询来下推'DISTINCT'操作:

SELECT m.email
  FROM members AS m
  JOIN (SELECT DISTINCT p.email FROM posts AS p) AS q ON q.email = m.email
 WHERE (m.ads<>0) 
 ORDER BY ads DESC

成员表中每个单独的电子邮件地址最多只能有一个结果;如果您允许多个成员共享电子邮件地址,则可能仍需要在外部查询上使用DISTINCT。

但是,要重申开篇,你应该可以在你展示的其他条款中使用EXISTS运算符。