2012-02-02 82 views
0

工作我试图写这个SQL:左联接不能与子查询

SELECT 
    a.a_id as aid, 
    b.b_id as bid , 
    c.title 
FROM b , 
    (SELECT 
     a.a_id 
    FROM a 
    WHERE a.type = '2' 
    ) AS a 
LEFT JOIN c ON b.b_id = c.c_id 

如果我不付诸LEFT参考JOIN或选择c,那么它的工作原理。如果我确实放置了左连接,那么我得到的错误是b.b_id是未知列。为什么我不能在这里或更具体地使用左连接,为什么表b中的任何列未知?声明的第一部分是表b中的正常选择,为什么它不能找到那些列?

您何时使用子查询与内部联接?在这个例子中:

  • 表一个包含固定长度的标志(一堆整数)与约主题的信息
  • 表C中包含的东西等的主题标题等
  • 表B包含类别信息。

我想要完成的是拉出某种类型的所有类别(表格a),并且拉出所有的标题(表格c),其中类别id与它为主题ID(表b)。

回答

1

如果您交换表 “一” 与 “B” 的SQL编译(但是这是否给出结果你追求?):

SELECT 
    a.a_id as aid, 
    b.b_id as bid, 
    c.title 
FROM 
    (SELECT 
     a.a_id 
    FROM a 
    WHERE a.type = '2' 
    ) AS a, b 
LEFT JOIN c ON b.b_id = c.c_id 
+0

感谢那些做到了! – phpmeh 2012-02-02 22:54:30

+0

不客气。即使是一只盲松鼠,偶尔也会发现一颗坚果。 – 2012-02-02 22:57:04

1

试试这个

SELECT 
    a.a_id as aid, 
    b.b_id as bid , 
    c.title 
FROM b INNER JOIN 
    (SELECT 
     a.a_id 
    FROM a 
    WHERE a.type = '2' 
    ) AS a 
LEFT JOIN c ON b.b_id = c.c_id