左连接不使用子查询

时间:2012-02-02 22:24:50

标签: mysql

我正在尝试编写这个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或select c,那么它可以工作。如果我确实放了左连接,那么我得到一个错误,即b.b_id是一个未知列。为什么我不能在这里使用左连接或更具体地说,为什么表b中的任何列都未知?声明的第一部分是表b中的正常选择,为什么不能找到那些列?

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

  • 表a包含固定长度标记(一组整数),其中包含有关主题的信息
  • 表c包含主题标题等内容。
  • 表b包含类别信息。

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

如果将表“a”与“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