我有以下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;相反 - 它给出空结果,好像没有任何值为零的字段(实际存在)
答案 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运算符。