来自同一个表的多个MYSQL查询

时间:2012-07-13 00:24:38

标签: mysql union left-join where-clause multiple-tables

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

添加第二个显示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)

我发现其他一些线程有类似的问题,但似乎都没有正常工作 感谢

1 个答案:

答案 0 :(得分: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