1

假设我有这样的查询:

SELECT type_person FROM tbl_event WHERE id_animal = 1;

这给了我要加入的人员类型和目标表(在这种情况下,这将返回'worker')以从其他表中获取事件的全部数据,现在进行加入我知道我必须对'进行加入工人表'喜欢:

SELECT  a.*,b.*,z.*
FROM    tbl_event a
        left JOIN tbl_worker b
            ON a.type_person = b.type_person
        left JOIN tbl_animal z
            ON   z.id_animal = a.id_animal 
        WHERE z.id_animal = 1;

有没有办法通过以下方式更改左 JOIN tbl_worker b 的部分:

SELECT  a.*,b.*,z.*
FROM    tbl_event a
        left JOIN (SELECT type_person FROM tbl_event WHERE id_animal = 1)
            ON a.type_person = b.type_person
        left JOIN tbl_animal z
            ON   z.id_animal = a.id_animal 
        WHERE z.id_animal = 1;

这是一个小提琴

4

2 回答 2

1

当然,您需要执行以下操作:

SELECT  a.*,b.*,z.*
FROM    tbl_event a
        left JOIN (SELECT type_person FROM tbl_event WHERE id_animal = 1) as b
            ON a.type_person = b.type_person
        left JOIN tbl_animal z
            ON   z.id_animal = a.id_animal 
        WHERE z.id_animal = 1;

基本上你错过了别名(b在这种情况下)

这是一个更新的小提琴

于 2013-03-11T17:39:33.613 回答
1

当然可以 。你的意思是这样

 SELECT  a.*,b.*,z.*
 FROM    tbl_event a
    left JOIN (SELECT type_person FROM tbl_event WHERE id_animal = 1) b
        ON a.type_person = b.type_person
    left JOIN tbl_animal z
        ON   z.id_animal = a.id_animal 
  where z.id_animal = 1;

演示

在您的查询中,您只是忘记了AS b

于 2013-03-11T17:40:52.740 回答