从表1中选择所有行并标记表2中存在的行

时间:2011-04-06 12:34:19

标签: mysql

我有供应商表(身份证,姓名,地址)

我有另一个表格将供应商与客户联系起来(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

e.g。我想要所有供应商,列标记所有与客户ID = 100

相关联的供应商

4 个答案:

答案 0 :(得分:2)

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`

答案 1 :(得分:0)

您要么找一个有客户的供应商列表

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

或者您希望有一个连接,取决于关系船的工作方式,您需要确定您想要的连接类型,例如关系1-1,1-m,nm?

答案 2 :(得分:0)

SELECT id, name, address, customer_id as customer_link  FROM suppliers LEFT JOIN accredited_suppliers ON suppliers.id=accredited_suppliers.supplier_id

答案 3 :(得分:0)

希望这应该有用 -

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