【问题标题】:Mysql: How do I write select where ids are not in another tableMysql:如何编写选择ID不在另一个表中的位置
【发布时间】:2010-11-29 06:26:13
【问题描述】:
我有 2 个表的简单结构:联系人和 group_contacts。 一个联系人可以属于一个、多个或不属于任何组。 我正在尝试编写一个选择语句,它将为我提供所有联系人 不属于 group_id '123'。否定的,不要,让我感到困惑。 如果不存在“联系人”,则创建表( `contact_id` bigint(20) 无符号 NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL) 如果不存在 `group_contacts` 则创建表( `contact_id` bigint(20) 无符号非空, `group_id` int(11) unsigned NOT NULL) 谢谢

【问题讨论】:

    标签: mysql


    【解决方案1】:
    select a.contact_id from contacts a, group_contacts b where b.group_id<>123 and b.contact_id=a.contact_id;
    

    【讨论】:

    • 连接条件应始终在表单子句中过滤表乘法。
    • 我无法理解您的评论兄弟!!...您所说的表单子句是什么意思??
    【解决方案2】:

    您必须分两个宏观步骤进行:

    1. 首先,您需要在联系人和 group_contacts 表之间保留外部连接,以便选择在 group_contacts 表中存在和不存在任何相关关系的所有联系人
    2. 然后在group_contacts的where子句中,应该加载123的group_id。

    【讨论】:

      【解决方案3】:
      select * from contacts as ct 
      left join group_contacts as gc on ct.contact_id=gc.contact_id
      where gc.group_id!=123
      

      【讨论】:

        【解决方案4】:

        试试这个

        select * from contacts a left join  group_contacts b
        on a.contact_id = b.contact_id
        where  b.group_id !=123
        

        【讨论】:

        • 查询中有语法错误。请检查。我不确定我们可以像“left join b group_contacts”这样使用。别名应该在表名之后
        • 我修正了谢谢,错字错误b需要在curse的表名之后
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-08
        • 2012-03-23
        • 2018-03-20
        • 2016-10-25
        • 2010-09-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多