MySQL选择并加入-模糊列

时间:2018-09-16 09:12:51

标签: mysql

我正在尝试将四个表连接在一起。当我仅比较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')";

2 个答案:

答案 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子句中。