-2

私はこのような3つのテーブルを持っています:

commentテーブル :

commentId pid    sid       text      vid
1          1     null    comment 1    1
2         null    1     comment 2    1
3          2     null    comment 3    1

studentテーブル:

sid     firstname   lastname
1         john       adam
2         joan       adam

professorテーブル :

pid    firstname   lastname
1       mark        abram
2       sean        hoak

結果が次のように返されるようにクエリを作成したい:

firstname    lastname
mark          abram
john          adam
sean          hoak

メートル

if (select query ==null) 
   then (select query 1) 
   else select (query 2)

私は次のことを試しました:

if((select pid from comment==null)
then select student.firstname , student.lastname from student where sid in (select sid from comment where vid=1)

else
(select professor.firstname ,professor.lastname from professor where pid in (select pid from comment where vid=1)

しかし、運が悪い。

希望の結果を達成する方法はありますか?

4

4 に答える 4

1

私があなたの質問を理解しているなら、あなたは彼らが学生であるか教授であるかに関係なく、vid=1でコメントを投稿した人の名前を見たいと思います。これはそれを行います。ALEFT JOINは、nullを含め、左側のテーブルからすべてを取得します。適切なIDの両方にアクセスするだけLEFT JOINで、必要なものを入手できます。

SELECT ISNULL(p.firstname,s.firstname), ISNULL(p.lastname,s.lastname) --,comment or whatever other things you want to show
FROM Comment C
LEFT JOIN professor P ON P.pid = c.pid
LEFT JOIN student s ON s.sid = c.sid
WHERE vid = 1
于 2012-06-15T20:45:34.743 に答える
1

私があなたを正しく理解していれば、このクエリは次のことを行う必要があります。

SELECT A.commentId, ISNULL(B.firstname,C.firstname) firstname, ISNULL(B.lastname,C.lastname) lastname
FROM comment A
LEFT JOIN student B
ON A.sid = B.sid
LEFT JOIN professor C
ON A.pid = C.pid
于 2012-06-15T20:45:41.170 に答える
1

これを試して:

SELECT COALESCE(p.firstname, s.firstname), COALESCE(p.lastname, s.lastname)
FROM comments c
LEFT JOIN Professors p
ON c.pid = p.pid
LEFT JOIN Students s
ON c.sid = s.sid

ちょっと厄介で、学生と教授を統合したビューを作成すると、おそらく改善される可能性があります。

于 2012-06-15T20:46:03.260 に答える
0

また

select student.firstname , student.lastname 
from student 
where sid in (select sid from comment where vid=1 and pid is null)
UNION ALL
select professor.firstname ,professor.lastname 
from professor 
where pid in (select pid from comment where vid=1 and PID is not null)
于 2012-06-15T20:49:10.190 に答える