两个表:
//SKILL
SNAME
---------------------
C++
C#
C
JAVA
//REQUIRED
SNAME REQUIRED
------------------------
C++ C
C# reading
C writing
C reading
JAVA C我使用了这个查询
SELECT DISTINCT sq.SNAME,sq1.requires AS "requires" FROM SREQUIRED sq
INNER JOIN SREQUIRED sq1
ON sq.SNAME='C++';但是我的输出是
SNAME REQUIRES
-------------------------------
C++ C
C++ reading
C++ writing我的问题是,如果我想找到skills C++直接需要的技能,我应该使用什么查询?输出应如下所示:
SNAME REQUIRES
-------------------------------
C++ C
C reading
C writing因为C++需要C语言,而C语言需要读写。它就像第一级,第二级,等等。
发布于 2014-05-08 13:48:04
不是最好的解决方案,但你可以这样尝试:
select * from srequired
where sname='C++'
UNION
select * from srequired
where sname in (select required from srequired where sname='C++')发布于 2014-05-08 14:02:44
使用CTE使其成为泛型。级别可能比2更深。使用以下查询来获得所需的结果。
with cte
As
(
Select SName, [Required] from courses where SName = 'C++'
Union All
Select courses.SName, courses.[Required] from courses
inner join cte on courses.SName = cte.[Required]
)
select * from cte希望能有所帮助。
发布于 2014-05-08 13:50:12
加入条件
ON sq.SNAME='C++'; 不关联两个表(sq和sq1),并将结果集限制为sq.SNAME = 'C++',这就是为什么您在输出中仅获取SNAME = 'C++‘的原因。
联接需要如下所示。
ON sq.Requires = sq1.sName 然后,您需要在Where子句中指定:
WHERE sq.sNAME = 'C++'然后,您将在2行代码中使用带有'C++‘的sq.sName。sq1.sName在所有列中都包含'c‘。和sq1。需要‘阅读’和‘写作’
要在单个输出中获得结果集,您必须使用UNION或CTE。一个联盟会给你两个你需要的等级。CTE可以为您提供n个级别。也就是说,如果阅读有另一个必备条件。
https://stackoverflow.com/questions/23533429
复制相似问题