sqlite 当存在相同的列名时,如何在where子句中定位别名列名?

dnph8jn4  于 2023-03-30  发布在  SQLite
关注(0)|答案(1)|浏览(311)

所以在原始表SELECT id FROM drivers中有一个列teamid。然而在我的复杂查询中,这个teamid没有用于输出。
我使用的是teamid,但它来自另一个表作为别名。

SELECT
    id,
    (
        SELECT
            teamid
        FROM
            attendancelist
        WHERE
            activityid = 3
            AND driverid = driver.id
    ) as teamid
FROM
    drivers

当我尝试在teamid上使用WHERE子句时。它使用来自driverteamid,而不是别名teamid。我发现避免这种情况的唯一方法是将别名重命名为不在驱动程序表中的列名,例如:customteamid .
但是我想知道,就像你可以用driver.teamid显式地从driver中获取teamid一样,有没有一种方法可以显式地获取别名列名?

bakd9h0s

bakd9h0s1#

不能从WHERE中的SELECT子句引用子查询。
要执行您所描述的操作,您应该使用JOIN
大概是这样的

SELECT
    id,
    attendancelist.teamid
FROM
    drivers
    inner join attendancelist on (
        attendancelist.activityid = 3
        AND attendancelist.driverid = drivers.id
    )
where
    attendancelist.teamid = 100500 -- YOU CONDITION HERE

编辑:如果你的请求假设teamidNULL作为一个有效的结果,并且你计划在你的WHERE子句中以某种精心设计的方式使用attendancelist.teamid-使用LEFT JOIN代替:

SELECT
    id,
    attendancelist.teamid
FROM
    drivers
    left join attendancelist on (
        attendancelist.activityid = 3
        AND attendancelist.driverid = drivers.id
    )
where
    (colA + attendancelist.teamid = colB) 
 OR (colC = colD)

相关问题