[英]SELECT clause with self joining table
兩張桌子:
//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
我的問題是,如果我想找到C ++技能直接要求的技能,我應該使用哪種查詢? 輸出應該是這樣的:
SNAME REQUIRES
-------------------------------
C++ C
C reading
C writing
因為C ++需要C,而C需要讀寫。 就像第一級,第二級等等。
不是最好的解決方案,但是您可以這樣嘗試:
select * from srequired
where sname='C++'
UNION
select * from srequired
where sname in (select required from srequired where sname='C++')
使用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
希望能幫助到你。
加盟標准
ON sq.SNAME='C++';
不關聯兩個表(sq和sq1),並將結果集限制為sq.SNAME ='C ++',這就是為什么在輸出中只獲取SNAME ='C ++'的原因。
該聯接將需要如下。
ON sq.Requires = sq1.sName
然后,在Where子句中,您需要指定:
WHERE sq.sNAME = 'C++'
然后,您將在兩行中得到帶有“ C ++”的sq.sName。 在所有列中均帶有“ c”的sq1.sName。 和sq1。要求帶有“閱讀”和“撰寫”
要在單個輸出中獲得結果集,您將必須使用UNION或CTE。 一個UNION將為您提供所需的2個級別。 CTE可以給您n級。 也就是說,如果閱讀還有另一個必要條件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.