【问题标题】:select all rows from table 1 and mark rows that exist in table 2从表 1 中选择所有行并标记表 2 中存在的行
【发布时间】:2011-04-06 12:34:18
【问题描述】:

我有一个供应商表(ID、名称、地址)

我有另一个表将供应商与客户联系起来(accredited_suppliers-> supplier_id, customer_id)

我想选择所有带有标识符的供应商,该标识符显示是否与客户有关系 (customer_id)

即结果如下所示:

供应商:

id, name, address, customer_link
1, name1, address1, null
2, name2, address2, Yes
3, name3, address3, null
4, name4, address4, Yes

更多信息:

供应商表: ID 姓名 ... ...

客户表: ID 姓名 ... ...

AccreditedSuppliers 表: ID 客户ID 供应商编号

例如我想要所有供应商,并有一列标记链接到客户 id=100 的所有供应商

【问题讨论】:

  • 不清楚您的问题中表之间的关系(什么是主键和外键)。

标签: mysql


【解决方案1】:
SELECT t1.*, IF(count(`t2`.`customer_id`) > 0, 'yes', NULL) as customer_link
FROM `suppliers` AS `t1`
LEFT JOIN `accredited_suppliers` AS `t2` ON `t2`.`supplier_id` = `t1`.`id`

【讨论】:

    【解决方案2】:

    您正在寻找有客户的供应商列表

    SELECT * FROM suppliers WHERE supplier_id IN ( SELECT supplier_id FROM customers );
    

    或者您正在寻找一个联接,根据关系的运作方式,您需要弄清楚您想要什么类型的联接,例如关系是 1-1、1-m、n-m?

    【讨论】:

      【解决方案3】:
      SELECT id, name, address, customer_id as customer_link  FROM suppliers LEFT JOIN accredited_suppliers ON suppliers.id=accredited_suppliers.supplier_id
      

      【讨论】:

        【解决方案4】:

        希望这能奏效-

        select id, name, address, 
        (case when exists(select 'x' from linkedtable where id in (supplier_id)) 
           then 'Yes' else null end) as customer_link
        from suppliers
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多