我有下表
关键字表
CREATE TABLE trigger_keyword
(
id bigint NOT NULL,
keyword text NOT NULL,
CONSTRAINT trigger_keyword_id PRIMARY KEY (id)
)
这是桥表
CREATE TABLE trigger_keyword_trigger_message
(
trigger_keyword_id bigint NOT NULL,
trigger_message_id bigint NOT NULL,
CONSTRAINT trigger_keyword_trigger_message_trigger_keyword_id_fkey FOREIGN KEY (trigger_keyword_id)
REFERENCES public.trigger_keyword (id) MATCH SIMPLE
ON UPDATE CASCADE
ON DELETE NO ACTION,
CONSTRAINT trigger_keyword_trigger_message_trigger_message_id_fkey FOREIGN KEY (trigger_message_id)
REFERENCES public.trigger_message (id) MATCH SIMPLE
ON UPDATE CASCADE
ON DELETE NO ACTION
)
消息表
CREATE TABLE trigger_message
(
id bigint NOT NULL,
message text NOT NULL,
CONSTRAINT trigger_message_id PRIMARY KEY (id)
)
我在PostgreSQL数据库之外有一个字符串列表,我将循环运行它。
假设我们在trigger_keyword
表中有以下关键字
trigger_keyword表
id keyword
----------------------------------------
1 hi
2 hello
3 the weather
4 the climate
trigger_message表
id message
-----------------------------------------
1 Hi how is your day?
2 Hello, have a wonderful day
3 Looks sunny today
4 Excellent, no rain today
5 looks like we'll have showers today
假设我们的一个字符串是Hi Robot!
,那么SQL查询应该返回Hi how is your day?
或Hello, have a wonderful day
;它应该随机选择其中之一。如果字符串包含hello robot
而不是hi robot
,则应该执行相同的操作,因为hi
和hello
都在关键字表中。
如果字符串包含tell me the weather
,则SQL查询应随机返回Looks sunny today
或Excellent, no rain today
或looks like we'll have showers today
。
我认为我必须为此使用全文搜索?
这是我第一次使用桥表,是否需要在桥表中手动插入关系?
答案 0 :(得分:2)
您应在包含两列的“ bridge”表上定义主键约束。
this answer中指示的全文本搜索是实现此目的的一种方法。
要随机选择一个结果行,可以将以下内容附加到查询中:
ORDER BY random() LIMIT 1
要插入表中,可以使用DEFAULT
子句,并在id
列的定义中使用序列,并使用INSERT ... RETURNING
获取桥表的值。 / p>