我正在尝试将四个表连接在一起。当我仅比较EVENT_DATA并加入PERSONA表时,代码可以正常工作,因为我可以从PERSONA(EVENT_DATA表中不存在)获取“名称”列。但是,问题之一是CUSTOMCAR表中也存在此“名称”列,因此我只能得到其中一个。此外,当我尝试添加最后一个join语句时,该代码根本无法运行。
如果有人可以帮助我,那太好了!
$sql = "SELECT * FROM EVENT_DATA
LEFT JOIN PERSONA ON EVENT_DATA.personaId = PERSONA.ID
LEFT JOIN CUSTOMCAR ON CUSTOMCAR.ownedCarId = EVENT_DATA.carId
LEFT JOIN CARCLASSES ON CARCLASSES.store_name = CUSTOMCAR.name
WHERE (EVENT_DATA.EVENTID = '299')";
答案 0 :(得分:1)
您应避免使用*
,而应使用显式列列表:
SELECT EVENT_DATA.personaId, ...
FROM EVENT_DATA
LEFT JOIN PERSONA ON EVENT_DATA.personaId = PERSONA.ID
LEFT JOIN CUSTOMCAR ON CUSTOMCAR.ownedCarId = EVENT_DATA.carId
LEFT JOIN CARCLASSES ON CARCLASSES.store_name = CUSTOMCAR.name
WHERE (EVENT_DATA.EVENTID = '299');
如果您使用相同的列名,则需要使用别名:
SELECT ...
CUSTOMCAR.NAME AS c_name,
PERSONA.NAME AS p_name
...
答案 1 :(得分:1)
您也可以使用Aliasing:
$sql = "SELECT ed.*,
pa.*,
cc.*,
ccs.*
FROM EVENT_DATA AS ed
LEFT JOIN PERSONA AS pa ON ed.personaId = pa.ID
LEFT JOIN CUSTOMCAR AS cc ON cc.ownedCarId = e.carId
LEFT JOIN CARCLASSES AS ccs ON ccs.store_name = cc.name
WHERE (ed.EVENTID = '299')";
注意:尽管按照 @Lukasz 的建议,您实际上应该避免使用通配符(*),并提供明确的列列表在SELECT
子句中。