我正在尝试使用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
答案 0 :(得分:2)
如果core_available_units
和core_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
?