2015-02-23 27 views
1

我有两个表的部分记录,如图1:需要从2个表

enter image description here

我需要这样的结果:

enter image description here

我加入试过,但我无法得到所需的结果。

SELECT 
    company_info.t_id, 
    company_info.company_name, 
    company_info.remark, 
    tender.company_selected, 
    company_info.company_document 
FROM 
    company_info 
LEFT OUTER JOIN 
    tender 
ON company_info.t_id = tender.t_id; 

注:它显示公司文件了两行,但我需要它仅适用于选定的公司。请检查快照2以供参考。

+0

应用'第一台左加入第二table'试一下 – 2015-02-23 07:19:57

+0

你能告诉你已经尝试查询? – 2015-02-23 07:25:23

回答

0

此代码工作

SELECT company_info.t_id, company_info.company_name, company_info.remark, 
CASE WHEN tender.company_selected =company_info.company_name THEN tender.company_selected ELSE '' END, 
CASE WHEN tender.company_selected =company_info.company_name THEN company_info.company_document ELSE '' END FROM 
company_info LEFT OUTER JOIN tender ON company_info.t_id = tender.t_id 
0
SELECT 
    company_info.t_id, 
    company_info.company_name, 
    company_info.remark, 
    tender.company_selected, 
    company_info.company_document 
FROM 
    company_info 
LEFT OUTER JOIN 
    tender 
ON company_info.t_id = tender.t_id; 
+0

它在两行都显示公司文档,但我只需要选中的公司。请检查快照2以供参考。 – SJSSoft 2015-02-23 07:47:06

+0

然后在选择部分使用: ** CASE WHEN tender.company_selected = '' 然后 '' ELSE company_info.company_document END **(这会占据** ** company_info.company_document在我的代码以上)。请注意,我正在从内存中写入,而没有真正检查代码,但现在应该能够弄清楚这一点。 – dust 2015-02-23 07:55:27

+0

我对sql不太熟悉,请给我确切的查询。我正在尝试3个小时,每件事都在我脑海中混乱。感谢您的回应。 – SJSSoft 2015-02-23 07:56:51

0

一个left join应该做的伎俩:

SELECT a.t_id a.company_name, a.remark, 
      b.company_selected, b.company_document 
FROM  company_info a 
LEFT JOIN tender b ON a.t_id = b.t_id 
0

这将让你你在找什么:

SELECT c.t_id, 
     c.company_name, 
     c.remark, 
     IFNULL(t.company_selected,'') as company_selected, 
     CASE WHEN t.company_selected IS NULL THEN '' ELSE c.company_document END AS company_document 
FROM company_info c LEFT JOIN 
    tender t ON c.t_id=t.t_id AND c.company_name=t.company_selected 

说明:

这个查询会做如下:

  • 从公司表中选择t_id,comapany_name,remark
  • 从投标表中选择公司名称。如果没有记录,则此列将为空。
  • 如果在投标表中没有记录,则此栏为空,否则从公司表中选择company_document