select colume_name1,colume_name2,F.* from(
select colume_name1,colume_name2 from tablename2
union
select colume_name1,colume_name2 from tablename3
) F
left join tablename1 on......
这种结构谁能帮我解释一下吗!

解决方案 »

  1.   

    查询3个表的colume_name1,colume_name2
    union在一起???
      

  2.   


    tablename2 與tablename3 並集后 在于tablename1 左連接.
      

  3.   

    select colume_name1,colume_name2,F.* from( 
    select colume_name1,colume_name2 from tablename2 
    union /*这个UNION 表示 将select colume_name1,colume_name2 from tablename2 和select colume_name1,colume_name2 from tablename3
    这2个查询出来的结果组合到一起,只要他们的列数相同就可以了*/ 
    select colume_name1,colume_name2 from tablename3 
    ) F --这里括号里面的子查询后出来的结果作为一张新表 取别名F 
    left join tablename1 on...... 
    -F与tablename1做左连接
      

  4.   

    F.* from( 
    select colume_name1,colume_name2 from tablename2 
    union 
    select colume_name1,colume_name2 from tablename3 
    ) F 
    left join tablename1 on...... 
    ????貌似没这样写过
      

  5.   

    先执行括号里的生成一个表F,再left join tablename1
      

  6.   

    语句写得有问题,
    F.*就是colume_name1,colume_name2,重复选择了
    union 得到tablename2和tablename3中的不重复的数据
    union all是得到所联合的表的所有的数据(包括重复)
    left join是左联合,在你这儿是select colume_name1,colume_name2,F.*的数据,但没有tablename1表的数据,可以放限制条件
      

  7.   

    /*
     总体来说这个结构就是 先用UNION 将  tablename2 与 tablename3的集合作为新表F 然后与 tablename1 左链接 
     连接完后 取出所要的值
    */
      

  8.   

    呵呵!colume_name1,colume_name2我是乱写的,事实是不相关数据列。不好意思
      

  9.   

    这就是一种普通的联合查询,表tablename2与tablename3结合起来当作一个表使用.其中
    select colume_name1,colume_name2 from tablename2 
    union 
    select colume_name1,colume_name2 from tablename3意思是表tablename2,tablename3的唯一值作为新表数据使用(如果是UNION ALL的话就是全部值)这种查询类似于
    SELECT A.column_name1, B.column_name1
    FROM tablename1 A
    LEFT JOIN B
    ON A.column_name1 = B.column_name1其中B表示表tablename2,tablename3的联合
    PS:发贴格式还没弄明白,不好意思
      

  10.   

    不一定。
    colume_name1,colume_name2 也许照楼主的意思 这2列是在tablename1里面的列
    所以LZ可以这么写
    select t1.colume_name1,t1.colume_name2,F.* from( 
    select colume_name1,colume_name2 from tablename2 
    union 
    select colume_name1,colume_name2 from tablename3 
    ) F 
    left join tablename1 t1 on...... 
      

  11.   

    select t1.colume_name1,t1.colume_name2,F.* from( 
    select tablename2_colume_name1,tablename2_colume_name2 from tablename2 
    union 
    select tablename3_colume_name1,tablename3_colume_name2 from tablename3 
    ) F 
    left join tablename1 t1 on...... 
      

  12.   

    呵呵!明白了,就是把不同的收费项目通过union链接起来,然后通过他们所在节点进行筛选。谢谢了
    还想问下,这样比前面Small_Four说就是left join。那么说那个写法速度快些
      

  13.   

    速度都一样的
    只是写法不同而已,
    SELECT A.id, B.name
    FROM A, B
    WHERE A.id = B.id 这是老式的写法,而SELECT A.id, B.name
    FROM A 
    LEFT JOIN B
    ON A.id = B.id 是新式写法,推荐使用新式写法。
      

  14.   

    修改一下,刚才说的有问题
    这种连接方法,不是代表LEFT JOIN,而是代表INNER JOIN
      

  15.   

    是带子查询的左连接语句-- 如下是联合语句, 意思是tableName2与tableName3中的所有记录合并
    -- MSSQL将合并后的结果集暂存TempDB数据库中, 供外层使用
    -- 其实这个语句是整个语句中的一个子查询语句
    select colume_name1,colume_name2 from tablename2 
    union 
    select colume_name1,colume_name2 from tablename3 -- 将这个子查询语句定义一个别名F, 这样再引用起来方便
    -- 其实它是一个结果集, 可以当做一个表F来看待

    select colume_name1,colume_name2 from tablename2 
    union 
    select colume_name1,colume_name2 from tablename3 
    ) F 
    -- 用表F左连接表tablename1
    -- 查询结果将返回表F中所有的记录, 记录数也就是表F的记录数
    -- 而tablename1中的记录将根据on语句后的条件返回, 如果符合条件的将是实际数据, 不符合条件的以NULL值返回
    select colume_name1,colume_name2,F.* 
    from

    select colume_name1,colume_name2 from tablename2 
    union 
    select colume_name1,colume_name2 from tablename3 
    ) F 
    left join tablename1 
    on...... 
    -- 引深一下
    -- 如下只返回表F中存在,而表tablename1不存在的数据, 联接条件就是on后的条件 
    select colume_name1,colume_name2,F.* 
    from

    select colume_name1,colume_name2 from tablename2 
    union 
    select colume_name1,colume_name2 from tablename3 
    ) F 
    left join tablename1 
    on...... 
    where tablename1.字段 is null