0

所以我有两个表工作和联系人,我试图做一个显示工作的行,显示工作地点和分配的技术。现在联系人可以是技术人员或工作地点,我希望保持这种方式,但如果需要可以更改。有什么好方法可以做到这一点。

添加显示 location_label 的第二个 where 子句的正确方法是什么

SELECT 
  jobs.job_id, contacts.location_label, contacts.tech_label
FROM 
  jobs
LEFT JOIN 
  contacts ON jobs.tech_id = contacts.contact_id

工作表

Field   Type    Null    Key     Default     Extra
job_id  int(6)  NO  PRI     NULL    auto_increment   
location_id     int(5)  NO      NULL         
tech_id     int(5)  YES         0        
creator_id  varchar(9)  NO      NULL     
creation    timestamp   NO      CURRENT_TIMESTAMP    
service_requested   varchar(400)    YES         NULL     
service_performed   varchar(400)    YES         NULL     
status_id   int(5)  NO      NULL     

联系人表

Field   Type    Null    Key     Default     Extra
contact_id  int(9)  NO  PRI     NULL    auto_increment    
location_label  varchar(30)     YES         NULL     
address     varchar(20)     YES         NULL     
city    varchar(15)     YES         NULL     
state   varchar(2)  YES         NULL     
zip     int(10)     YES         NULL     
phone   int(11)     NO      NULL         
user_level  int(2)  YES         NULL     
first_name  varchar(10)     YES         NULL     
last_name   varchar(10)     YES         NULL             
type_tech   tinyint(1)  YES         NULL     
type_location   tinyint(1)  YES         NULL     
type_admin  tinyint(1)  YES         NULL     
tech_label  varchar(20)     YES         NULL     
creator_id  int(9)  YES         NULL     

我正在寻找行输出为 jobs.job_id、contacts.location_label、contacts.tech_label

Contacts.location_label 将是工作的位置 (jobs.location_id) contacts.tech_label 将是分配工作的技术人员 (jobs.tech_id)

我发现了一些其他有类似问题的线程,但它们似乎都不能正常工作,谢谢

4

1 回答 1

0

您必须加入联系人表两次,一次用于技术,一次用于位置。

SELECT J.job_id, 
       L.location_label, 
       T.tech_label
  FROM jobs J
  LEFT JOIN contacts T ON J.tech_id = T.contact_id
  LEFT JOIN contacts L ON J.location_id = L.contact_id
于 2012-07-13T02:55:14.123 回答