0

tbl_settings常にレコードが 1 つしかないテーブルがあります。そしてその中のフィールドshow_messages_in_log。もう 1 つtable tbl_logsはすべてのログを保存します。もちろん、tbl_logsメッセージ欄があります。

ログを表示するビューが必要です:

  • tbl_settings.show_messages_in_logが true の場合、表示しますtbl_logs.message
  • false の場合tbl_settings.show_messages_in_log、表示しませんtbl_logs.message

どんな体でも私を助けてくれますか?

4

3 に答える 3

1

たぶん、このようにテーブルに参加するだけです

create table tbl_settings 
(show_messages_in_log boolean);

create table tbl_logs
(message varchar(200));

insert into tbl_logs
values ('msg1'), ('msg2');

insert into tbl_settings 
values (true);

select tbl_logs.message
from tbl_logs inner join tbl_settings on tbl_settings.show_messages_in_log = TRUE

これにより、すべての行が返されます。

update tbl_settings set show_messages_in_log = false;

select tbl_logs.message
from tbl_logs inner join tbl_settings on tbl_settings.show_messages_in_log = TRUE

これは行をまったく返しません。

于 2012-11-12T09:52:11.640 に答える
1

できません。リレーショナル データベースのリレーション (テーブル、ビュー) では、常に一定数の列が必要です。

できる唯一のことは、常にその列を持ち、ビューでは NULL として表示することです。そのためには、2 つのテーブルを結合し、ビューでケース式を使用する必要があります。

case 
   when show_messages_in_log = 'true' then tbl_logs.message
   else null
end as message
于 2012-11-12T09:40:37.550 に答える
0
IF tbl_settings.show_messages_in_log = TRUE THEN tbl_logs.message
ELSE NULL
END IF
于 2012-11-12T09:42:31.743 に答える