Php 选择表中所有不带“";X";

Php 选择表中所有不带“";X";,php,mysql,Php,Mysql,我正在尝试选择MySQL表中的联系人,该表在INVESTMENTS表中没有任何相关信息 我有一个类似这样的查询,但它没有正确地提取我所有的联系人 TL;DR选择所有联系人,然后删除所有有投资的联系人 SELECT * FROM contacts INNER JOIN investments ON investments.contactId = contacts.contactId WHERE contacts.userId = '1' AND contacts.t

我正在尝试选择MySQL表中的联系人,该表在INVESTMENTS表中没有任何相关信息

我有一个类似这样的查询,但它没有正确地提取我所有的联系人

TL;DR选择所有联系人,然后删除所有有投资的联系人

SELECT
    *
FROM
    contacts
INNER JOIN investments ON investments.contactId = contacts.contactId
WHERE
    contacts.userId = '1'
    AND contacts.trash IS NULL
    AND NOT EXISTS ( SELECT * FROM investments WHERE investments.company IS NULL )
GROUP BY
    contacts.contactId

非常感谢您的帮助。

内部联接需要联接表中的匹配项。您需要查找不匹配项的是
外部联接
,以及联接表字段上的简单where条件为
null

Outer Join
s为找不到匹配项的联接表组成一个包含所有空值的“虚拟记录”。。例如,如果表1的唯一列中有a、b、c,并且
外部联接
表2包含a-1、b-2,则表1的前两个条目将得到匹配,而第三个值的无匹配->伪记录:a-a-1、b-b-2、c-NULL-NULL。现在,您可以通过添加
where
条件来控制希望看到的结果,例如
where table2 col为null
,并且只有第三个匹配项保持-c-null-null


请注意,它们是
left-outer-join
s和
right-outer-join
s,具体取决于您是否希望为左侧或右侧表的不匹配项创建虚拟对象。Sql允许删除单词
outer
,因此它通常读取
left join
right join

一个
内部联接
需要联接表中的匹配项。您需要查找不匹配项的是
外部联接
,以及联接表字段上的简单where条件为
null

Outer Join
s为找不到匹配项的联接表组成一个包含所有空值的“虚拟记录”。。例如,如果表1的唯一列中有a、b、c,并且
外部联接
表2包含a-1、b-2,则表1的前两个条目将得到匹配,而第三个值的无匹配->伪记录:a-a-1、b-b-2、c-NULL-NULL。现在,您可以通过添加
where
条件来控制希望看到的结果,例如
where table2 col为null
,并且只有第三个匹配项保持-c-null-null


请注意,它们是
left-outer-join
s和
right-outer-join
s,具体取决于您是否希望为左侧或右侧表的不匹配项创建虚拟对象。Sql允许删除单词
outer
,因此它通常读取
left join
right join

,您可以使用
left join
并检查公司是否为空。通过使用
左连接
而不是
内部连接
,您仍然可以获得
联系人
,他们在
投资
表中没有任何内容

SELECT
    *
FROM
    contacts
LEFT JOIN investments ON investments.contactId = contacts.contactId
WHERE
    contacts.userId = '1'
    AND contacts.trash IS NULL
    AND investments.company IS NULL
GROUP BY
    contacts.contactId

您可以使用
左连接
并检查公司是否为空。通过使用
左连接
而不是
内部连接
,您仍然可以获得
联系人
,他们在
投资
表中没有任何内容

SELECT
    *
FROM
    contacts
LEFT JOIN investments ON investments.contactId = contacts.contactId
WHERE
    contacts.userId = '1'
    AND contacts.trash IS NULL
    AND investments.company IS NULL
GROUP BY
    contacts.contactId

从联系人c中选择*

在i.contactId=c.contactId上左键连接i

其中c.userId='1',c.trash为NULL,i.company不为NULL


按c分组。联系人ID

从联系人c中选择*

在i.contactId=c.contactId上左键连接i

其中c.userId='1',c.trash为NULL,i.company不为NULL


按c.contactId分组

可以澄清一点吗?我对外部联接不太熟悉。内部连接与外部连接您可以删除
内部连接
,只需使用
连接
。我想我应该提一下。谢谢阿甘朱,是的,现在说得通了。令人沮丧的是,我使用的是一些简单的东西,只是一个大脑放屁,我想我没有考虑外部连接。一开始的想法是完全错误的。感谢您在这方面的帮助!谢谢我没有看到太多关于实际SQL的内容,不过解释得很好。可以澄清一下吗?我对外部联接不太熟悉。内部连接与外部连接您可以删除
内部连接
,只需使用
连接
。我想我应该提一下。谢谢阿甘朱,是的,现在说得通了。令人沮丧的是,我使用的是一些简单的东西,只是一个大脑放屁,我想我没有考虑外部连接。一开始的想法是完全错误的。感谢您在这方面的帮助!谢谢我没有看到太多关于实际SQL的东西,不过解释得很好。是的,令人沮丧的错误,我的想法完全不同。左路的连接显然是一个不同的世界。所以这是有道理的。和阿加朱提到的一样。谢谢你的帮助!是的,令人沮丧的错误,我的想法完全不同。左路的连接显然是一个不同的世界。所以这是有道理的。和阿加朱提到的一样。谢谢你的帮助!在这里,看看这把小提琴,我本来想添加一个答案,但他们关闭了它。谢谢你的意见!这太棒了。当然,就像我说的,我会给出答案的,但它已经关闭了,回头见!在这里,看看这把小提琴,我本来想添加一个答案,但他们关闭了它。谢谢你的意见!这太棒了。当然,就像我说的,我会给出答案的,但它已经关闭了,回头见!