如何使用MYSQL创建3向LEFT JOIN?

时间:2012-03-14 07:22:35

标签: mysql

我正在尝试使用MYSQL创建一个3向LEFT JOIN并且我很难完成它所以我认为这将是解决问题的地方。

我有三张桌子,我将在下面显示。第一个包含用户已添加到其队列以由游戏处理的项目列表。另外两个包含每个项目的详细信息,例如它们的优势,完成点等。在排队表中,我有两种类型的项目,单位和研究。单位详情见表2,研究详情见表3.

表1:第一个表(core_queued_units)包含以下字段:id,unit_id,name,location,class(unit or research),sort。

表2:第二个表(core_available_units)包含以下字段:id,name,description等。

表3:第三个表(core_available_tech)包含以下字段:id,name,description等。

FROM core_queued_units
LEFT JOIN core_available_units
ON core_queued_units.unit_id = core_available_units.id
AND core_queued_units.class='Unit'
LEFT JOIN core_available_tech
ON core_queued_units.unit_id = core_available_tech.id
AND core_queued_units.class='Research'
WHERE core_queued_units.location = '1'
AND core_queued_units.user_id ='".$GLOBALS['self']['usrID']."'
ORDER BY core_queued_units.sort ASC

3 个答案:

答案 0 :(得分:2)

如果core_available_unitscore_available_tech中的字段相同,您可以尝试:

SELECT *
  FROM core_queued_units cq
  LEFT JOIN (
     select cau.*, 'Unit' class from core_available_units cau
      union all
     select cat.*, 'Research' class from core_available_tech cat) c
    ON cq.unit_id = c.unit_id and c.class = cq.class
WHERE cq.location = '1'
  AND cq.user_id ='".$GLOBALS['self']['usrID']."'
ORDER BY cq.sort ASC

答案 1 :(得分:1)

如果您尝试连接多个表,则可以执行以下操作。我将Table1作为基表。

SELECT columnname1, columnname2......
FROM Table1 
LEFT OUTER JOIN Table2 ON Table1.PK = Table2.FK (here Table2.FK is the Primary key of Table1 which is used as Foreign key in Table2)
LEFT OUTER JOIN Table3 ON Table1.PK = Table3.FK (same condition as above) 
WHERE insert your conditions here 

使用此样本,表2和表2中的列。表3将添加在表1的最右侧。 如果有帮助,请告知。

答案 2 :(得分:0)

您可以尝试交换On-clause

中的参数

core_queued_units.unit_id = core_available_tech.id