是否可以使用WHERE语法限制数据,但只能限制一个字段而不是整个SQL语句


Is it possible to restrict data using the WHERE syntax but on only one field not the entire SQL statement

假设您有一个名为"Companies"的表,该表具有以下字段:Company _idname,并且您希望打印出该表中的所有内容,但您还有另一个称为emails的表,它具有字段:data_keydata_value以及Company_id。现在记住,你想打印公司下的所有内容,但进一步添加他们是否有电子邮件-现在如果我写了

Where data_key = email

由于我不想从电子邮件中获得任何不必要的数据-WHERE子句似乎有效,但它会丢弃所有没有data_key=到电子邮件的数据,我确实想要,但只用于电子邮件表,而不是公司表

有办法绕过这个吗我很感激任何东西,哪怕是一个小小的提示

非常感谢:)

子查询将是您的朋友:

select c.*,
(select count(*) from emails e where c.company_id = e.company_id) as email_count
from companies c

这将返回公司的所有信息,以及该公司的电子邮件数。

或者,如果你讨厌子查询:

select c.*, count(e.data_key) as email_count
from companies c
left join emails e on company_id
group by c.company_id

分组依据使左边的联接不会为每个公司返回多个电子邮件行。

但进一步添加他们是否有电子邮件

我还没有看到你的dbschema,但你可以加入包含你的电子邮件的表,并使用if语句定义一个布尔列来显示他们是否有电子邮件:

SELECT 
    IF(Emails.data_key IS NULL, 0, 1) as has_email
    , Companies.* 
FROM Companies
LEFT JOIN Emails ON (Emails.company_id = Companies.Company_id)

您可能不想执行left join,因为这会引入额外的行(如果有多封电子邮件)。你可以使用select distinct来绕过它。

这里有另一种作为嵌套选择的方法:

select c.*,
       (case when exists (select 1 from emails e on e.company_id = c.company_id and e.data_key = 'email'
             then 'Yes'
             else 'No'
        end) as HasEmails
from companies c;