相关疑难解决方法(0)

在SQL中查询具有不明确列名的错误

我在此查询(InvoiceID)中收到了一个不明确的列名称错误.我无法弄清楚为什么.它们似乎都正确连接,为什么管理工作室不知道显示VendorID?任何帮助将不胜感激.

查询:

SELECT 
    VendorName, InvoiceID, InvoiceSequence, InvoiceLineItemAmount
FROM Vendors 
JOIN Invoices ON (Vendors.VendorID = Invoices.VendorID)
JOIN InvoiceLineItems ON (Invoices.InvoiceID = InvoiceLineItems.InvoiceID)
WHERE  
    Invoices.InvoiceID IN
        (SELECT InvoiceSequence 
         FROM InvoiceLineItems
         WHERE InvoiceSequence > 1)
ORDER BY 
    VendorName, InvoiceID, InvoiceSequence, InvoiceLineItemAmount
Run Code Online (Sandbox Code Playgroud)

sql

29
推荐指数
3
解决办法
21万
查看次数

它可以引用PL/pgSQL变量或表列

我在pgsql中有一个函数

CREATE OR REPLACE FUNCTION core.date_bs_from_ad(date_in_ad date)
  RETURNS character varying AS
$$
BEGIN
    RETURN(
        SELECT date_in_bs FROM core.date_conversion
        WHERE date_in_ad = $1
    );
END
$$

  LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

它创建时没有错误,但是当我使用此功能时,它会通过以下错误:

ERROR:  column reference "date_in_ad" is ambiguous
LINE 3:   WHERE date_in_ad = $1
                ^
DETAIL:  It could refer to either a PL/pgSQL variable or a table column.
QUERY:  SELECT (
        SELECT MAX(date_in_bs) FROM core.date_conversion
        WHERE date_in_ad = $1
    )
CONTEXT:  PL/pgSQL function core.date_bs_from_ad(date) line 3 at RETURN
********** Error **********

ERROR: column reference …
Run Code Online (Sandbox Code Playgroud)

postgresql plpgsql pgadmin

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

缺少表的FROM子句条目

我编写了以下SQL语句来从两个表中获取数据gendata&TrainingMatrix:

SELECT * FROM (SELECT DISTINCT ON ("TrainingMatrix".payroll, "TrainingName", "Institute")"gendata"."Employee Name","gendata"."Position", "gendata"."Department",  "TrainingMatrix".* 
FROM "TrainingMatrix" JOIN "gendata" ON "TrainingMatrix".payroll = "gendata".payroll 
ORDER  BY payroll, "TrainingName", "Institute" ,"TrainingDate" DESC NULLS LAST) AS foo;
Run Code Online (Sandbox Code Playgroud)

它工作正常,但我需要通过以下方式过滤记录:

WHERE "TrainingMatrix"."ExpiryDate" - current_date <= 0 
AND  EXTRACT(YEAR FROM  "TrainingMatrix"."ExpiryDate") = EXTRACT(YEAR FROM current_date);
Run Code Online (Sandbox Code Playgroud)

因此,原始SQL语句将是:

SELECT * FROM (SELECT DISTINCT ON ("TrainingMatrix".payroll, "TrainingName", "Institute")"gendata"."Employee Name","gendata"."Position", "gendata"."Department",  "TrainingMatrix".* 
FROM "TrainingMatrix" JOIN "gendata" ON "TrainingMatrix".payroll = "gendata".payroll 
ORDER  BY payroll, "TrainingName", "Institute" ,"TrainingDate" DESC NULLS …
Run Code Online (Sandbox Code Playgroud)

sql database postgresql greatest-n-per-group

7
推荐指数
2
解决办法
2万
查看次数

pgsql返回表错误:列引用不明确

我一直得到这个错误:列引用"人"是模棱两可的.

我需要返回一个TABLE(人整数).当我使用SETOF整数时它工作正常但在这种情况下它不起作用.我的另一个函数recurse()非常好地返回一组整数.

CREATE OR REPLACE FUNCTION try(_group text) RETURNS TABLE (person integer) AS $$ 
DECLARE
     _init_id integer;
     _record integer;
BEGIN
     SELECT id INTO _init_id FROM egroups WHERE name = _group;

    FOR _record in SELECT person FROM egroupdata WHERE egroup IN (SELECT recurse(_init_id))
    LOOP
        RETURN NEXT;
    END LOOP;

END;
$$ language plpgsql stable;
Run Code Online (Sandbox Code Playgroud)

postgresql return function plpgsql

6
推荐指数
1
解决办法
1万
查看次数

为什么我收到“列引用***不明确”的信息?

此查询在postgress上运行良好,并返回了我正在寻找的2列:

SELECT  w.jobnr, w.ordernr
FROM
    (SELECT jobnr, ordernr FROM userdata.WIP_Data WHERE Year=2015 AND period=1) AS W
    LEFT OUTER JOIN
    (SELECT jobnr, ordernr FROM userdata.WIP_Data WHERE Year=2015 AND period=2) AS P 
    ON W.Jobnr=P.Jobnr;
Run Code Online (Sandbox Code Playgroud)

它返回:
在此处输入图片说明

但是当我将此查询包含在如下函数中时:

CREATE OR REPLACE FUNCTION userdata.test3()
 RETURNS TABLE(jobnr character varying, ordernr character varying)
 LANGUAGE plpgsql
AS $function$
BEGIN
    RETURN QUERY
    SELECT  w.jobnr, w.ordernr
    FROM
        (SELECT jobnr, ordernr FROM userdata.WIP_Data WHERE Year=2015 AND period=1) AS W

        LEFT OUTER JOIN
        (SELECT jobnr, ordernr FROM userdata.WIP_Data WHERE Year=2015 AND period=2) …
Run Code Online (Sandbox Code Playgroud)

postgresql postgresql-9.6

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

列引用的歧义

我尝试运行一个简单的代码如下:

Create Table weather (
    city        varchar(80),
    temp_lo     int,
    temp_hi     int,
    prcp        real,
    date        date
);
Insert Into weather Values ('A', -5, 40, 25, '2018-01-10');
Insert Into weather Values ('B', 5, 45, 15, '2018-02-10');

Create Table cities (
    city        varchar(80),
    location    point
);
Insert Into cities Values ('A', '(12,10)');
Insert Into cities Values ('B', '(6,4)');
Insert Into cities Values ('C', '(18,13)');

Select * From cities, weather Where city = 'A'
Run Code Online (Sandbox Code Playgroud)

但我得到的是

错误:列引用"city"不明确.

我的代码出了什么问题?

postgresql postgresql-9.6

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

Typeorm 给我 QueryFailedError:列引用“id”不明确

这是我要发出的查询:

const updatedUser = await queryRunner.manager
    .getRepository(UserEntity)
    .createQueryBuilder('user')
    .leftJoinAndSelect('user.categories', 'cats')
    .where('id = :userId', { userId })
    .getOne();
Run Code Online (Sandbox Code Playgroud)

这是由 typeorm 生成的查询:

SELECT "user"."id"               AS "user_id", 
       "user"."first_name"       AS "user_first_name", 
       "user"."last_name"        AS "user_last_name", 
       "user"."phone"            AS "user_phone", 
       "user"."password"         AS "user_password", 
       "user"."password_hint"    AS "user_password_hint", 
       "user"."recovery_email"   AS "user_recovery_email", 
       "user"."created"          AS "user_created", 
       "user"."username"         AS "user_username", 
       "user"."profile_pic"      AS "user_profile_pic", 
       "user"."is2fa"            AS "user_is2FA", 
       "user"."refresh_token"    AS "user_refresh_token", 
       "user"."profile_email"    AS "user_profile_email", 
       "user"."subscriptionid"   AS "user_subscriptionId", 
       "cats"."id"               AS "cats_id", 
       "cats"."template_id"      AS "cats_template_id", 
       "cats"."name"             AS "cats_name", 
       "cats"."entry_count"      AS "cats_entry_count", 
       "cats"."is_base_template" AS "cats_is_base_template", 
       "cats"."can_rename"       AS …
Run Code Online (Sandbox Code Playgroud)

postgresql node.js typeorm

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

INSERT ... ON CONFLICT DO UPDATE 中的列引用不明确

给定一个表:

CREATE TABLE IF NOT EXISTS test."TestCounter" 
("id" TEXT PRIMARY KEY, 
 "count" INTEGER);
Run Code Online (Sandbox Code Playgroud)

我想插入一条记录并增加计数器(如果该记录已存在)

CREATE TABLE IF NOT EXISTS test."TestCounter" 
("id" TEXT PRIMARY KEY, 
 "count" INTEGER);
Run Code Online (Sandbox Code Playgroud)

目前我收到此错误:

ERROR:  column reference "count" is ambiguous
LINE 4:  SET "count" = "count" + 1
                       ^
SQL state: 42702
Character: 107
Run Code Online (Sandbox Code Playgroud)

sql postgresql upsert

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