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......
这种结构谁能帮我解释一下吗!
select colume_name1,colume_name2 from tablename2
union
select colume_name1,colume_name2 from tablename3
) F
left join tablename1 on......
这种结构谁能帮我解释一下吗!
union在一起???
tablename2 與tablename3 並集后 在于tablename1 左連接.
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做左连接
select colume_name1,colume_name2 from tablename2
union
select colume_name1,colume_name2 from tablename3
) F
left join tablename1 on......
????貌似没这样写过
F.*就是colume_name1,colume_name2,重复选择了
union 得到tablename2和tablename3中的不重复的数据
union all是得到所联合的表的所有的数据(包括重复)
left join是左联合,在你这儿是select colume_name1,colume_name2,F.*的数据,但没有tablename1表的数据,可以放限制条件
总体来说这个结构就是 先用UNION 将 tablename2 与 tablename3的集合作为新表F 然后与 tablename1 左链接
连接完后 取出所要的值
*/
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:发贴格式还没弄明白,不好意思
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......
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......
还想问下,这样比前面Small_Four说就是left join。那么说那个写法速度快些
只是写法不同而已,
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 是新式写法,推荐使用新式写法。
这种连接方法,不是代表LEFT JOIN,而是代表INNER JOIN
-- 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