仅通过与其他两个表

时间:2016-01-08 16:00:02

标签: mysql sql

我有3个表“job_messages”包含3个记录,这些是我想要的以及使用外键链接的其他2个表中的名称

这是3个表格:

enter image description here

以下是SQL

SELECT 
  `job_messages`.`job_message_id`,
  `job_messages`.`job_time`,
  `job_messages`.`job_type`,
  `job_messages`.`work_group_id`,
  `job_messages`.`location_id`,
  `job_messages`.`patient_name`,
  `job_messages`.`room_no`,
  `job_messages`.`test_taken`,
  `job_messages`.`worker_id`,
  `job_messages`.`notes`,
  `work_group`.`work_group`,
  `locations`.`location_name`
FROM
  `job_messages`
  INNER JOIN `work_group` ON (`job_messages`.`work_group_id` = `work_group`.`work_group_id`)
  INNER JOIN `locations` ON (`work_group`.`work_group_id` = `locations`.`work_group_id`)

我从这个select中得到12行的问题以及重复的记录和我想要的只是“job_messages”的主要3条记录,正确的SQL应该是什么?

2 个答案:

答案 0 :(得分:2)

您是否尝试过更改加入地点?

 INNER JOIN `locations` USING (`location_id`)

或者,如果您更喜欢使用ON

INNER JOIN `locations` ON (`job_messages`.`location_id` = `locations`.`location_id``)

答案 1 :(得分:1)

你说你的表job_messages包含3行,但是你不知道其他两个表中有多少行。

您的查询看起来没问题,所以我猜测问题就是数据。

尝试这个查询。

SELECT `work_group_id`, count(*)
FROM `work_group`
GROUP BY `work_group_id`
HAVING count(*) > 1

SELECT `work_group_id`, count(*)
FROM `locations`
GROUP BY `work_group_id`
HAVING count(*) > 1

如果其中任何一个查询返回结果,则表示您遇到问题并导致重复的行。

修改

如果您有多个位置,请尝试使用此

FROM       `job_messages`
INNER JOIN `work_group` 
        ON (`job_messages`.`work_group_id` = `work_group`.`work_group_id`)
INNER JOIN `locations` 
        ON (`job_messages`.`location_id` = `locations`.`location_id`)

OR

FROM       `job_messages`
INNER JOIN `work_group` 
        ON (`job_messages`.`work_group_id` = `work_group`.`work_group_id`)
INNER JOIN `locations` 
        ON (`work_group`.`work_group_id` = `locations`.`work_group_id`)
       AND (`job_messages`.`location_id` = `locations`.`location_id`)