标签: relational-division

在同一个表上使用多个 JOIN 查询的替代方法?

我有一个 Postgresql 11 数据库。假设我有一张桌子,叫做houses。它应该有数十万条记录。

CREATE TABLE houses (
  pkid serial primary key,
  address varchar(255) NOT NULL,
  rent float NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

现在,我的房子有我想在数据库中注册的功能。由于可能的功能列表会很长(几十个)并且会随着时间的推移而演变,因为我不想在表屋中添加一长串列并使用“ALTER TABLE”不断更改表,我想到了这些功能有一个单独的表格:

CREATE TABLE house_features (
   pkid serial primary key,
   house_pkid integer NOT NULL,
   feature_name varchar(255) NOT NULL,
   feature_value varchar(255)
);
CREATE INDEX ON house_features (feature_name, feature_value);
ALTER TABLE house_features ADD CONSTRAINT features_fk FOREIGN KEY (house_pkid) REFERENCES houses (pkid) ON DELETE CASCADE;
Run Code Online (Sandbox Code Playgroud)

平均而言,每个房屋记录在house_features表中将有 10-20 条记录。

到目前为止,这似乎是一个简单高效的模型:我可以添加尽可能多的不同功能,控制上层(应用层和/或 GUI)中feature_namefeature_value的可能值。每次应用程序发展时我都不必更改数据库,我需要一种新的功能。 …

postgresql relational-division query-performance

3
推荐指数
1
解决办法
217
查看次数

SQL 处理多个 AND 条件

我有以下数据:

机构_编号 信用类型
1 1
1 2
2 1

我有一个列表框,以便用户可以选择多个 Cred_type,他们希望能够选择 OR 或 AND 条件。

对于 OR 我有这样的 AND CRED_TYPE IN (1,2)

对于AND,我真是摸不着头脑。他们的意思是,他们想要一份具有cred type 1和cred_type 2的机构列表。也许我没有想清楚,但这是逐行的,所以这样做会导致没有结果。

AND cred_type = 1 AND cred_type = 2 -- 您不能让一行有两个不同的值,这将不会返回任何结果。

它们要求用户可以选择 10、20 或更多,因此为每个代码编写一堆代码并将它们组合起来非常困难 - 但这是我迄今为止唯一的想法。会是这样的

Select institution_no from table where cred_type = 1
UNION 
Select institution_no from table where cred_type = 2
Run Code Online (Sandbox Code Playgroud)

-- 这会将两者结合起来并得到我想要的东西,但你可以想象其中 10 或 20 个的所有代码。

oracle relational-division

3
推荐指数
1
解决办法
600
查看次数

使 IN 子句表现得像 AND 子句

我在stackoverlow上问过同样的问题,但没有得到答案,所以这就是我在这里问的原因(我读过应该在 SO 上问简单的 sql 问题,但我别无选择)。

假设我有 3 个表:posts,post_categoriescategories. 我正在实现某种带有过滤器的页面,我可以在其中按类别过滤帖子。用户可以选择多个类别。当他选择多个时,它们应该相加。我无法让它工作。我现在拥有的是简单的IN()SQL 子句:

SELECT posts.id, post_categories.category_id FROM posts 
JOIN post_categories ON posts.id = post_categories.post_id 
WHERE post_categories.category_id IN (1,2,3) LIMIT 10;
Run Code Online (Sandbox Code Playgroud)

但它并不匹配所有的 id,它是OR,我需要AND. 我在这里需要的是查找类别为 的所有帖子id=1 AND id=2 AND id=3,但此查询返回IN()列表中至少有一个类别的帖子。

postgresql relational-division

2
推荐指数
1
解决办法
218
查看次数

证明或反驳“T=R÷S”意味着“S=R÷T”?

证明或反驳:

鉴于此T=R÷S,暗示S=R÷T.


我的尝试:

让我们拿一些R,S表格来划分R÷S

第1步:

     R                           S              ==>       T=R÷S
     -------------            ---------                 -----
    | A | B | C |             | A | B |                  | C |
    | 1 | 2 | 4 |             | 1 | 2 |                  | 4 |
    | 3 | 3 | 4 |             | 3 | 3 |                  | 9 |
    | 1 | 7 | 4 |
    | 1 | 2 | 9 |
    | …
Run Code Online (Sandbox Code Playgroud)

relational-division

0
推荐指数
1
解决办法
59
查看次数