日期:2014-05-18  浏览次数:20546 次

怎么查询两张表的所有内容,排除相同的内容?

SQL code
CREATE TABLE ee_work
(work_id INT NOT NULL identity(1,1) PRIMARY KEY,
work_name NVARCHAR(20) NOT NULL UNIQUE,
)
CREATE TABLE ee_terms
(term_id INT NOT NULL identity(1,1) PRIMARY KEY,
term_name NVARCHAR(10) NOT NULL UNIQUE,
work_id INT FOREIGN KEY REFERENCES ee_work(work_id)
)


select ee_work.*,ee_terms.* from ee_work,ee_terms
查询后返回如图结果:

请问该怎么写查询语句?谢谢!

我想弄成这样的页面效果:


asp.net的页面的执行代码:
C# code
……
string html = string.Empty; //HTML页面
SqlCommand cmd = new SqlCommand(cmdtext, conn);
 //创建SqlDataReader对象,用于保存查询数据信息
SqlDataReader dr = cmd.ExecuteReader();
//应用while循环语句获取在SqlDataReader中获取到的数据
while (dr.Read())
{
  //html += ……;自己绘制表格
}
……
this.classlist.Text = html;
dr.Close();
conn.Close();



------解决方案--------------------
SQL code

--测试数据
DECLARE @t TABLE(ID char(3),PID char(3),Name nvarchar(10))
INSERT @t SELECT '001',NULL ,'山东省'
UNION ALL SELECT '002','001','烟台市'
UNION ALL SELECT '004','002','招远市'
UNION ALL SELECT '003','001','青岛市'
UNION ALL SELECT '005',NULL ,'四会市'
UNION ALL SELECT '006','005','清远市'
UNION ALL SELECT '007','006','小分市'
--深度排序显示处理
--生成每个节点的编码累计(相同当单编号法的编码)
DECLARE @t_Level TABLE(ID char(3),Level int,Sort varchar(8000))
DECLARE @Level int
SET @Level=0
INSERT @t_Level SELECT ID,@Level,ID
FROM @t
WHERE PID IS NULL
WHILE @@ROWCOUNT>0
BEGIN
    SET @Level=@Level+1
    INSERT @t_Level SELECT a.ID,@Level,b.Sort+a.ID
    FROM @t a,@t_Level b
    WHERE a.PID=b.ID
        AND b.Level=@Level-1
END
--显示结果
SELECT SPACE(b.Level*2)+'|--'+a.Name
FROM @t a,@t_Level b
WHERE a.ID=b.ID
ORDER BY b.Sort
/*--结果
|--山东省
 |--烟台市
 |--招远市
 |--青岛市
|--四会市
 |--清远市
 |--小分市
--*/

------解决方案--------------------
没有看内容,只从标题分析:怎么查询两张表的所有内容,排除相同的内容?
SQL code
SELECT * FROM ee_work 
UNION
SELECT * FROM ee_terms
--两结果集合并,不保留重复的部分

--反之
SELECT * FROM ee_work 
INTERSECT
SELECT * FROM ee_terms
--两结果集合并,只保留重复的部分

------解决方案--------------------
SQL code
select ee_work.*,ee_terms.* 
from ee_work left join ee_terms
on ee_work.wrok_id =ee_terms.work_id