gpt4 book ai didi

sql - 查询返回确切的行数

转载 作者:行者123 更新时间:2023-11-29 14:12:34 25 4
gpt4 key购买 nike

我有一个存储两个外键的表,实现了 n:m 关系。

其中一个指向一个人(subject),另一个指向一个特定的项目。
现在,一个人可能拥有的元素数量在另一个表中指定,我需要一个查询,该查询将返回与一个人可能拥有的元素数量相同的行数。

其余的记录可以用 NULL 值或其他任何值填充。

事实证明,从应用程序端解决这个问题很痛苦,所以我决定尝试一种不同的方法。

编辑:示例

CREATE TABLE subject_items
(
sub_item integer NOT NULL,
sal_subject integer NOT NULL,
CONSTRAINT pkey PRIMARY KEY (sub_item, sal_subject),
CONSTRAINT fk1 FOREIGN KEY (sal_subject)
REFERENCES subject (sub_id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT fk2 FOREIGN KEY (sub_item)
REFERENCES item (item_id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE
)

我需要一个查询/函数来返回所有主题项目(主题可能有 5 个项目)但只有 3 个项目分配给该主题。

返回有点像:

sub_item   |  sal_subject
2 | 1
3 | 1
4 | 1
NULL | 1
NULL | 1

我正在使用 postgresql-8.3

最佳答案

考虑plpgsql 函数 的这个主要简化 版本。应该在 PostgreSQL 8.3 中工作:

CREATE OR REPLACE FUNCTION x.fnk_abonemento_nariai(_prm_item integer)
RETURNS SETOF subject_items AS
$BODY$
DECLARE
_kiek integer := num_records -- get number at declaration time
FROM subjekto_abonementai WHERE num_id = _prm_item;
_counter integer;
BEGIN

RETURN QUERY -- get the records that actualy exist
SELECT sub_item, sal_subject
FROM sal_subject
WHERE sub_item = prm_item;

GET DIAGNOSTICS _counter = ROW_COUNT; -- save number of returned rows.

RETURN QUERY
SELECT NULL, NULL -- fill the rest with null values
FROM generate_series(_counter + 1, _kiek);

END;
$BODY$ LANGUAGE plpgsql VOLATILE STRICT;

关于 plpgsql in the manual 的详细信息(链接到版本 8.3)。

关于sql - 查询返回确切的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8892054/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com