0

フィールドに基づくテーブルの結合に関する問題を解決する必要があります。私は3つのテーブルを持っています:

NEWS (id,title)

COMMENTS (id,idtopic,message)

NOTIFICATIONS (iduser,idnews,idtopic,idpost)

COMMENTShasの場合はidtopic=0トピック、>0 の場合はトピックの返信です。NOTIFICATIONS各種情報を利用者に通知します。

を選択して、他のテーブルからフィールドを取得したいと思いますNOTIFICATIONS

ベースSELECTは次のとおりです。

SELECT idnews,idtopic,idpost FROM notifications WHERE iduser=X

今、私は参加したいです:

  • NEWS->タイトル、idnews>0の場合
  • COMMENTS->メッセージ、idtopic>0の場合
  • COMMENTS->メッセージ、idpost>0の場合

私は次のようなものを作るべきだと思います:

SELECT CASE idnews>0 THEN ??,
       CASE idtopic>0 THEN ??, CASE idpost>0 THEN
  FROM NOTIFICATIONS

idnews/idtopic/idpost のいずれかが常に >0 であるため、タイトルまたはメッセージを含むフィールドを常に返したい

各レコードの各テーブルを結合せずにSELECT内でSELECTする方法は? 作りたくない

SELECT *
 FROM NOTIFICATIONS
 LEFT JOIN NEWS ON NOTIFICATIONS.idnews=NEWS.id
 LEFT JOIN COMMENTS ON NOTIFICATIONS.idtopic=COMMENTS.id
 LEFT JOIN COMMENTS ON NOTIFICATIONS.idpost=COMMENTS.id

よりパフォーマンスが悪くなってしまうからCASE WHEN idnews>0 OR idtopic>0 OR idpost>0です。

4

2 に答える 2

0

これがあなたの求めているものかどうかはわかりませんが、このような選択内で選択できます...

SELECT donor.idno, name, contamt, driveno 
FROM donor, donation 
WHERE donor.idno = donation.idno AND driveno > any 
(SELECT driveno FROM drive WHERE drivename = 'Animal Home');
于 2013-02-08T11:25:26.233 に答える
0

私はあなたを正しく理解したことを願っています、これを試してください:

create procedure printNotification(in input_userid int)
BEGIN
  DECLARE id_news int;
  DECLARE id_topic int;
  DECLARE id_post int;
  DECLARE id_title char(30);
  DECLARE id_message char(30);
  SELECT idnews,idtopic,idpost INTO @id_news,@id_topic,@id_post FROM NOTIFICATIONS WHERE iduser=input_userid;
  IF(id_news>0) THEN
    SELECT title INTO @id_title FROM NEWS WHERE id=id_news;
  END IF;

  IF(id_topic>0) THEN
    SELECT message INTO @id_message FROM COMMENTS WHERE id=idtopic;
  END IF;

  IF(idpost>0) THEN
    SELECT message INTO @id_message FROM COMMENTS WHERE id=idpost;
  END IF;

END//
于 2013-02-08T13:50:46.653 に答える